我有一个任务列表,其中有3个参数在计划时要考虑:释放时间,持续时间和截止日期。
发布时间是该任务最早的开始时间。 持续时间是执行任务所花费的时间。 最后期限是任务的最新可能完成时间。
例如,输入为:
4
2 3 5
4 2 8
1 2 6
6 4 11
这意味着有4个任务,如第一行所示。从下一行开始,第一列是发布时间,第二列是持续时间,第三列是每个任务的截止日期。
安排这些任务的方式是:
Time Task
1-2 3
2-5 1
5-6 3
6-8 2
8-12 4 <--- Deadline Violation
目标是编写一种算法来安排任务,以使违反最后期限的次数最少。
因此,对于上述情况,我们必须具有输出:
1 2 3
2 5 1
5 6 3
6 8 2
8 12 4
第一列是开始时间,第二列是结束时间,第三列是任务编号。
我认为我们需要为此使用贪婪算法,但我不确定。
因此,我正在寻找可能的算法/方法来解决此问题。
答案 0 :(得分:1)
在调度理论中,您的问题可以用以下符号表示:
1|r_j|sum(U_j)
(您可以查看this wikipage以获得有关该符号的更多说明)
根据this website, 您的问题是NP困难的,因为例如1 | r_j | L_max是NP困难的。
这意味着您找不到能在多项式时间内解决问题的贪婪算法(除非P = NP,它是o ne-million dollar open question,但没人真正相信它)。
答案 1 :(得分:0)
我建议通过关于精确方法的调度理论来解决这个问题。编写问题的数学模型可以得出以下最佳解决方案。
1 3 3
3 6 1
6 8 2
8 12 4
目标函数将延迟(即延迟的“天数”)降到最低。以您为例,要迟到两天。