有人可以用一种不那么正式的方式解释贪婪选择如何成为活动选择问题的最佳解决方案吗?这是我找到的最简单的解释,但我并没有真正得到它
贪婪选择如何根据完成时间排序的活动? 让给定的一组活动为S = {1,2,3,.. n},并按活动时间对活动进行排序。贪婪的选择是总是选择活动1.为什么活动1总是提供最佳解决方案之一。我们可以通过显示如果存在具有除1之外的第一活动的另一解决方案B来证明它,则还存在具有活动1作为第一活动的相同大小的解决方案A.让B选择的第一个活动为k,那么总是存在A = {B - {k}} U {1}。(注意,B中的活动是独立的,k在所有中都有最小的结束时间。因为k不是1,完成(k)> =完成(1))。
答案 0 :(得分:0)
以下是我对为什么贪婪的解决方案总是用词的理解:
断言:如果A
是贪婪的选择(从排序数组中的第一个活动开始),那么它将提供最佳解决方案。
证明:让其他选择B
从某些活动k
开始(k!= 1或finishTime(k)> = finishTime(1)),它单独给出了最佳选择解决方案。因此,B
没有第1
个活动,可以在A
和B
之间编写以下关系:
>
A = {B - {k}} U {1}
在这里:
1。集A
和B
是不相交的
2. A
和B
都具有兼容的活动
由于我们得出了| A | = | B |的结论,因此活动A
也给出了最优解。
答案 1 :(得分:0)
假设A是一个最佳解决方案,如果间隔为S = {1,2,3,..... m},并且解决方案的长度为n1,则它以1开头。如果A不是最优解,则存在另一个以k!= 1开头且长度为n2的finishTime(k)> = finishTime(1)的解决方案B。 因此,n2> n1。 现在,如果我们从解决方案B中排除k,则剩下n2-1个元素。 由于k不与B中的其他间隔重叠,因此1也将不重叠。 这是因为B(不包括k)中的所有间隔都将具有startTime> = finishTime(k)> = finishTime(1)。因此,如果将B中的k替换为1,则长度仍为n2。但是从1开始的最佳解是长度为n1的A。我们得到n1 = n2,这与n2> n1相矛盾。因此,以1开头的解决方案是最佳的。