C中的抢占式任务调度

时间:2018-10-28 10:00:19

标签: algorithm data-structures greedy

我有一个任务列表,其中有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

第一列是开始时间,第二列是结束时间,第三列是任务编号。

我认为我们需要为此使用贪婪算法,但我不确定。

因此,我正在寻找可能的算法/方法来解决此问题。

2 个答案:

答案 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

目标函数将延迟(即延迟的“天数”)降到最低。以您为例,要迟到两天。