我正在阅读算法设计手册第2版。可以解释一下ShortestJobFirst和OptimalScheduling算法的区别。给出的算法如下
ShortestJobFirst(I) {
}
OptimalScheduling(I)
我无法理解其含义 “我们的日程安排和机器人问题之间的差异在于有一个问题 该算法能够正确,高效地解决电影调度问题。想一想 第一个终止的工作 - 即。包含最右边点的间隔x 这是所有间隔中最左边的。这个角色由“离散”数学扮演 在图1.5中。其他工作可能已经开始在x之前,但所有这些工作必须在 至少部分重叠,因此我们最多可以从该组中选择一个。该 要终止的这些作业中的第一个是x,因此任何重叠的作业都可能会阻塞 了解其权利的其他机会。显然,我们永远不会因为选择x而输掉。 这表明以下正确,高效的算法----“
示例位于算法设计手册(page 10/11 from this PDF)中。
答案 0 :(得分:1)
它们都是具有不同成本函数的贪心算法。一个选择最短运行时间的作业,一个选择首先完成的作业。
运行时间最短的作业如果比另一个作业晚启动,可能实际上不会先完成,所以为了使我们的贪婪算法更好地工作,我们需要一个不同的成本函数。
考虑:
----JJJ---
-JJJJ-JJJJ
顶部代表ShortestJobFirst
。由于JJJ
比JJJJ
短,因此它会被选中运行,因为您一次只能运行一个作业,它会阻止其他两个作业运行。
另一种选择是OptimalScheduling
,它选择第一个完成,表示为第二行。
因为它在最短的工作之前或之前完成,所以我们总是至少和我们选择最短的工作一样好。