我有以下问题。 想象一下一组作业,包括开始时间(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。
预先谢谢你
答案 0 :(得分:0)
首先将作业从最高优先级到最低优先级,然后从最短到最长排序。如果已经安排了不超过n
个重叠作业,则可以将每个作业添加到“待办作业列表”中。拥有完整的“要做的工作”列表后,您可以按开始时间进行排序,并在一次通过中将工作分配给机器。
这是一个贪婪算法,有可能您找不到执行给定优先级的最多工作的组合。但是优先级较低的工作永远不会碰到优先级较高的工作。