修改活动选择

时间:2014-06-03 10:16:02

标签: dynamic-programming greedy

在活动选择中我们对活动的完成时间进行排序,然后应用没有两个活动可以重叠的约束。我想知道我们是否可以通过对开始时间进行排序并观察活动是否重叠

我正在经历http://www.geeksforgeeks.org/dynamic-programming-set-20-maximum-length-chain-of-pairs/

此链接有一个动态编程解决方案,用于查找数字对的最大长度链。根据我这是活动选择问题的另一个公式,但我已经在网上搜索,也有读取cormen但他们要求排序的所有地方在完成时间...... 我想我们排序的时间(开始或结束)并不重要,但只是想确认相同的

1 个答案:

答案 0 :(得分:1)

在贪心算法中,我们总是试图最大化我们的结果。因此,在活动选择中,我们尝试在给定的时间间隔内容纳尽可能多的进程,而不会相互重叠。

如果按开始时间排序,那么您的解决方案可能不是最佳解决方案。我们举个例子,

Processes        start Time      Finish Time 
A                  1                9
B                  3                5
C                  6                8

开始时间排序: 如果您执行进程A,因为它最早启动,则无法执行其他进程,因为它们将重叠。因此,对于给定的时间间隔,您只能执行一个过程。

按完成时间排序: 如果您执行进程B因为它最早结束,那么您可以在此之后执行进程C.因此,对于给定的时间间隔,您可以执行两个过程。