我们可以解决调度问题,我们必须使用贪婪算法选择不重叠的最大连续区间集合:我们只是选择最早结束的区间:http://en.wikipedia.org/wiki/Interval_scheduling
显然,贪婪地挑选最少冲突的间隔是行不通的。
我想知道是否将所有间隔放在一个大集合中,然后贪婪地删除剩余最多冲突的间隔(直到间隔没有冲突)。我可以设想使用优先级队列来实现这个贪婪算法:每当我们从优先级队列中删除具有最大冲突的间隔X时,我们更新过去与间隔X冲突的其他间隔,以便其他间隔现在被标记为具有1减少冲突。
这有用吗?我试图想出一个反例来反驳它并且不能。
答案 0 :(得分:5)
这是一个反例。 这个想法是在第一个选择上放下一个必要的间隔。 冲突的数量在右边。
==== 2
---- 3
---- 3
==== 4
---- 3
---- 3
==== 2
显然,我们希望选择三个粗体(====
)间隔并删除四个细长(----
)间隔。
没有其他方法可以获得三个不相交的区间。
顺便说一句,你可能会发现关于贪婪问题的TopCoder tutorial很有意思,因为它首先讨论了同一问题的几种方法。