📅  最后修改于: 2021-01-12 03:33:47             🧑  作者: Mango
在工作排序问题中,目标是找到一系列工作,这些工作在其期限内完成并获得最大的利润。
让我们考虑,一组n分别与期限相关的,利润是赚了,如果作业被其限期完成给定的工作。需要以最大利润的方式订购这些工作。
可能所有给定的工作可能都无法在其期限内完成。
假设,第i个工作J i的截止日期为d i ,而从该工作获得的利润为p i 。因此,该算法的最优解是具有最大利润的可行解。
因此,对于$ 1 \ leqslant i \ leqslant n $,$ D(i)> 0 $。
最初,这些作业是根据利润排序的,即$ p_ {1} \ geqslant p_ {2} \ geqslant p_ {3} \ geqslant \:… \:\ geqslant p_ {n} $。
Algorithm: Job-Sequencing-With-Deadline (D, J, n, k)
D(0) := J(0) := 0
k := 1
J(1) := 1 // means first job is selected
for i = 2 … n do
r := k
while D(J(r)) > D(i) and D(J(r)) ≠ r do
r := r – 1
if D(J(r)) ≤ D(i) and D(i) > r then
for l = k … r + 1 by -1 do
J(l + 1) := J(l)
J(r + 1) := i
k := k + 1
在此算法中,我们使用两个循环,一个循环在另一个循环中。因此,该算法的复杂度为$ O(n ^ 2)$。
让我们考虑一组给定的作业,如下表所示。我们必须找到一系列工作,这些工作将在他们的期限内完成,并将获得最大的利润。每个工作都与最后期限和利润相关联。
Job | J1 | J2 | J3 | J4 | J5 |
---|---|---|---|---|---|
Deadline | 2 | 1 | 3 | 2 | 1 |
Profit | 60 | 100 | 20 | 40 | 20 |
为了解决这个问题,给定的工作根据其利润以降序排列。因此,排序后,作业将如下表所示进行排序。
Job | J2 | J1 | J4 | J3 | J5 |
---|---|---|---|---|---|
Deadline | 1 | 2 | 2 | 3 | 1 |
Profit | 100 | 60 | 40 | 20 | 20 |
从这组工作中,首先我们选择J 2 ,因为它可以在其截止日期之前完成并贡献最大的利润。
接下来,选择J 1 ,因为与J 4相比它提供了更多的利润。
在下一个时钟中,无法选择J 4,因为它的截止期限已结束,因此选择J 3时它在其截止期限内执行。
由于作业J 5无法在其期限内执行,因此将其丢弃。
因此,解决方案是作业序列( J 2 ,J 1 ,J 3 ),这些作业在其截止日期内执行并获得最大的利润。
此序列的总利润为100 + 60 + 20 = 180 。