最大值调度算法

时间:2012-05-07 22:30:19

标签: algorithm scheduling time-complexity

我有一个项目列表,每个项目都需要两天才能完成并且有截止日期。让 P [i] .id,P [i] .duedate和p [i] .value 成为项目的ID,项目的截止日期以及您获得的价值按时完成项目(在截止日期或之前)

编写算法,该算法作为输入数组A并返回您将要执行的项目和时间的计划,以最大化您获得的值。 算法的输出是一个数组B,这样B [i]就是你在第i天工作的项目的id,i> = 1。

在特定日期不超过一个项目,除非在截止日期前完成,否则您无法获得项目的价值,今天是第0天,您将从第1天开始处理项目(截止日期是整数),例如,如果项目的截止日期是5,您可以选择在第3天和第5天进行处理)

1-写算法。 2-证明算法是最优的? 3-算法的时间复杂度是多少?

1 个答案:

答案 0 :(得分:0)

如果所有值都相同则很简单,只需选择最少的截止日期就可以选择贪婪的方法。

当值不同时,您可以使用类似的方法,但这次是通过动态编程(我假设您的截止日期是离散的)。

创建一个大小为Max{due date}的数组,将其命名为V,此数组包含可在特定时间内获得的最大可能值,以及V中每个值保存的另一个数组相关V[i]中的所选任务,现在您有了这个DP选项:

  

V [0] = 0,V [1] = max {value_x 1 ,V [i] = Max {V [i-2] + value_x i ,V [i-1]}

这里value_x i 表示到期日等于或小于i的最大值任务,此更新不应该在V [i-2]选择中,在更新之后V [i]选择。

最后,我将通过查找此算法的顺序及其正确性来完成您的作业,还可以提高内存使用率。