您将获得一组 n 个职位。每个作业都与开始时间和结束时间相关联,两者都表示为整数,以及您从中获得的利润。您必须确定要采取哪些工作以最大化利润,请记住,任何时候都只能完成一项工作。是否有一个算法优于 O(n 2 )效率?
答案 0 :(得分:0)
您描述的问题称为加权区间调度,可以在O(nlogn)步骤中解决 - 如果作业已经排序,甚至可以解决O(n)。
快速Google搜索会为您提供有关它的所有信息。
答案 1 :(得分:0)
算法:
给定集合S = {I1,I2,...,In}:
现在我们订购了集{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)]}.
运行时:
对n个区间进行排序 - O(nlogn)。
构造D - O(n)。
总体运行时间= O(nlogn)。