我正在学习贪婪的算法,遇到了一个我不确定如何解决的问题。给定一组具有开始时间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)中。目标是获得一组间隔,这样如果您查看该组间隔中的所有可能时间,则每次至少会有一个原始间隔。
答案 0 :(得分:0)
贪婪算法是一种反复选择最佳增量改进的算法,即使从长远来看可能会证明是次优的。
你的算法对我来说似乎并不贪心。这个问题的贪婪算法是:
对于这个例子,它首先产生(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个区间