📜  DAA-具有截止日期的作业排序

📅  最后修改于: 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