事件安排

时间:2012-10-03 06:22:11

标签: algorithm

您将获得一组 n 个职位。每个作业都与开始时间和结束时间相关联,两者都表示为整数,以及您从中获得的利润。您必须确定要采取哪些工作以最大化利润,请记住,任何时候都只能完成一项工作。是否有一个算法优于 O(n 2 效率?

2 个答案:

答案 0 :(得分:0)

您描述的问题称为加权区间调度,可以在O(nlogn)步骤中解决 - 如果作业已经排序,甚至可以解决O(n)。

快速Google搜索会为您提供有关它的所有信息。

答案 1 :(得分:0)

算法:

给定集合S = {I1,I2,...,In}:

  • 根据开始时间从低到高对S中的间隔进行排序。

现在我们订购了集{J1,J2,...,Jn}。 (以W1,W2,......,Wn为利润)

我们将a(i)定义为最小索引k,这样Jk的开始时间高于Ji的结束时间。如果没有人,则返回-1。

在集合{Ji,Ji + 1,...,Jn}上将D [i]表示为最大利润(如您所述)。

所以我们得到:

D[-1] = 0;
D[i] = maximum{D[i+1],Wi + D[a(i)]}.
  • 返回D [0]。

运行时:

对n个区间进行排序 - O(nlogn)。

构造D - O(n)。

总体运行时间= O(nlogn)。