ShortestJobFirst和OptimalScheduling之间的区别

时间:2013-06-02 05:33:03

标签: algorithm

我正在阅读算法设计手册第2版。可以解释一下ShortestJobFirst和OptimalScheduling算法的区别。给出的算法如下

ShortestJobFirst(I) {

  1. 虽然(I =∅)做
  2. 接受我最短的工作j。
  3. 删除j,以及与I相交的任何间隔。
  4. }

    OptimalScheduling(I)

    1. 虽然(I =∅)做
    2. 在最早的完成日期之前接受我的工作j。
    3. 删除j,以及与I相交的任何间隔。
    4. 我无法理解其含义 “我们的日程安排和机器人问题之间的差异在于有一个问题 该算法能够正确,高效地解决电影调度问题。想一想 第一个终止的工作 - 即。包含最右边点的间隔x 这是所有间隔中最左边的。这个角色由“离散”数学扮演 在图1.5中。其他工作可能已经开始在x之前,但所有这些工作必须在 至少部分重叠,因此我们最多可以从该组中选择一个。该 要终止的这些作业中的第一个是x,因此任何重叠的作业都可能会阻塞 了解其权利的其他机会。显然,我们永远不会因为选择x而输掉。 这表明以下正确,高效的算法----“

      示例位于算法设计手册(page 10/11 from this PDF)中。

1 个答案:

答案 0 :(得分:1)

它们都是具有不同成本函数的贪心算法。一个选择最短运行时间的作业,一个选择首先完成的作业。

运行时间最短的作业如果比另一个作业晚启动,可能实际上不会先完成,所以为了使我们的贪婪算法更好地工作,我们需要一个不同的成本函数。

考虑:

----JJJ---
-JJJJ-JJJJ

顶部代表ShortestJobFirst。由于JJJJJJJ短,因此它会被选中运行,因为您一次只能运行一个作业,它会阻止其他两个作业运行。 另一种选择是OptimalScheduling,它选择第一个完成,表示为第二行。 因为它在最短的工作之前或之前完成,所以我们总是至少和我们选择最短的工作一样好。