给定间隔,例如(1,3)(2,4)(3,6)(4,7),找到不存在冲突的时间表,并且调度的间隔总长度最大。
我在研究“贪婪解决方案”等主题时研究了“区间调度”类型的问题。学校中的动态编程。我知道解决方案的不同取决于调度的具体目标,例如:安排尽可能多的间隔==>贪婪。
但对于这个问题,我认为我们不得不求助于暴力(枚举)? 请指教
答案 0 :(得分:0)
您提出的问题仍然可以通过贪婪的方法解决。既然您已经了解了原始的时间间隔调度问题,我将根据您在问题陈述中提到的内容来制定解决方案。
第1步:根据开始时间对时间间隔进行排序。
第2步:维护一个“spawn”池,它使用2元组堆来维护数据结构。
为了在步骤2中更精确,我们假设我们有N个已排序的时间间隔I[0]
... I[N-1]
,每个I
都有start
和{{1 }}属性,所以stop
。你有一个2元组的堆,每个元组代表I[i].start <= I[i+1].start
。 T表示离开堆的时间,或者等效于间隔的停止时间;如果选择此间隔,则M表示最大电流覆盖范围。注意堆的顺序由T维护。维护变量(T, M)
,保持当前的最大覆盖范围。因此,算法运行如下:
ANS