区间调度(非典型):最大化所有预定间隔的总长度

时间:2016-04-18 00:34:45

标签: algorithm sorting backtracking

给定间隔,例如(1,3)(2,4)(3,6)(4,7),找到不存在冲突的时间表,并且调度的间隔总长度最大。

我在研究“贪婪解决方案”等主题时研究了“区间调度”类型的问题。学校中的动态编程。我知道解决方案的不同取决于调度的具体目标,例如:安排尽可能多的间隔==>贪婪。

但对于这个问题,我认为我们不得不求助于暴力(枚举)? 请指教

1 个答案:

答案 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