【问题标题】:Priority interval scheduling algorithm优先区间调度算法
【发布时间】:2018-12-17 16:13:34
【问题描述】:

我有以下问题。 想象一组作业,开始时间 (st) 和结束时间 (et)。每个作业都有一个优先级值。我需要使用数量大于 1 的机器来安排这些作业。

基本上是与多个班级的教室间隔调度相同的问题,但我有优先级而不是权重。我不需要最大化权重,我只需要确保具有更高优先级的作业不会被丢弃,而另一个优先级较低的作业被选中并与其重叠。

此外,机器必须大部分时间都被占用。

这是否与其他已知问题相似? 帮助:S

用一个例子和我的想法编辑(输入作业是有序的):

----(a)0
  ----(b)1
   --------------------------(c)2
    -----------(d)3
      ----(e)5
        ------------(f)3
---------(g)4

----------(h)4


---------( i)4

字母=作业的id,数字=优先级。
例如,有 1 个输出队列,算法应该很简单:
- 检查局部最大值,(即比较后续作业,保持最佳作业,直到优先级为 x 的作业与优先级 > x 的作业不重叠)。在这种情况下,“e”是局部最大值。所以我们分析直到工作 f。
- 在之前分析的工作中搜索兼容的工作,删除冲突的工作。在我们的例子中,我们分析到“f”。我们可以删除与“e”冲突的工作,因此我们还剩下“a”和“b”。我们可以用“a”和“b”重复算法,得到“b”和“e”作为结果。现在我们可以继续处理未丢弃的后续作业(“g”、“h”和“i”)等等。

我的问题是在多个输出队列的情况下。
我的想法有 3 个输出队列,例如:
-选择局部最大值“e”。
- 选择其冲突域中最好的 2 个工作或以前的工作:在我们的例子中是“d”和“f”。
- 检查“d”和“f”的冲突域是否有 3 个优先级较高的作业。在这种情况下,丢弃它并选择碰撞中最好的那个。
- 必须更新以前选择的工作。假设“b”更长,优先级为 2.5 并与 f 发生碰撞。我们先选择“f”,然后我们需要丢弃它来选择“g”、“h”和“i”,然后选择 b。


提前谢谢你

【问题讨论】:

  • 你应该提供一个具体的例子。工作有几个可能的位置吗?如果是,请查看 Kunh-Munkres 算法。
  • 分享你的想法/发现。

标签: algorithm scheduled-tasks scheduling schedule np


【解决方案1】:

首先将作业从最高优先级排序到最低,然后从最短到最长排序。如果已经安排的重叠作业不超过n,则可以将每个作业添加到“待办作业列表”中。获得完整的“要完成的工作”列表后,您可以按开始时间排序并一次性将工作分配给机器。

这是一种贪心算法,您可能找不到在给定优先级下完成最多工作的组合。但是优先级较低的工作永远不会碰到优先级较高的工作。

【讨论】:

  • 我忘了必须是实时算法
  • @Vap 同样的想法有效。在查看工作时,您只需弄清楚“待办事项列表”应该包括哪些内容,以便在完成之前开始执行更高优先级的工作。如果您有足够多的作业,算法效率很重要,那么存储作业以便通过时间和优先级的组合快速访问它们可以使用四叉树来完成。但我敢打赌,不需要复杂化。
  • 这可能是解决方案,但是我意识到保持队列大部分时间都在使用不是必需的,所以我可以跳过时间排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多