我正在学习贪婪的算法,遇到了一个我不知道该如何解决的问题。给定一组具有开始时间a和结束时间b的间隔(a,b),给出一种贪婪的算法,该算法返回集合中每一个其他间隔重叠的最小间隔量。例如,如果我有:
(1,4) (2,3) (5,8) (6,9) (7,10)
我将返回(2,3)和(7,8),因为这两个区间涵盖了集合中的每个区间。我现在要说的是:
我的问题是:这个算法怎么会贪婪?我在为这些概念而挣扎。所以也许我有这个权利,也许我没有,但如果我这样做了,我不知道贪婪的规则是什么/应该是什么。
编辑:下面提出了一个有效的观点,对此我应该更清楚一些。(7,8)工作,而不是(1,10) (涵盖一切),因为每次(7,8)是在(5,8) (6,9)和(7,10)。与(2,3)相同,每次都在(1,4)和(2,3)中。目标是得到一组间隔,这样,如果您在这组间隔中查看所有可能的时间,那么每次都至少在一个原始的时间间隔内。
发布于 2015-10-28 01:54:43
贪婪算法是一种反复选择最佳增量改进的算法,即使从长远来看,它可能是次优的。
在我看来你的算法并不贪婪。对于这个问题,一个贪婪的算法是:
对于这个例子,它将首先生成(7,8),因为它包含在3个输入间隔中,然后将输入集缩减为(1,4) (2,3),然后生成(2,3)。
请注意,该算法没有为输入集产生最佳输出:(0,4)(1,2)(1,4)(3,6)(3,7)(5,6)
它首先生成(3,4),因为它由4个输入间隔覆盖,但最好的答案是(1,2)(5,6),每间隔3次。
https://stackoverflow.com/questions/33372763
复制相似问题