Algorithm 无权区间调度的动态规划算法?

Algorithm 无权区间调度的动态规划算法?,algorithm,time-complexity,dynamic-programming,Algorithm,Time Complexity,Dynamic Programming,我想知道是否有人能帮我解释一下未加权间隔调度的DP算法 给出了两个数组[t1,…,tn]和[d1,…,dn],其中ti是作业I的开始时间,di是作业I的持续时间。而且作业是按开始时间排序的,所以t1很抱歉,我现在没有更多的时间来解决这个问题。这里有一个想法,我认为它很适合动态编程。[事实上,我认为它是DP,但自从我上次研究这些东西以来,已经过去了将近二十年了…] 假设T={t1,t2,…,tn}的分区如下: T = {t1, t2, ..., tn} = {t1, t2, ..., tk} U

我想知道是否有人能帮我解释一下未加权间隔调度的DP算法


给出了两个数组[t1,…,tn]和[d1,…,dn],其中ti是作业I的开始时间,di是作业I的持续时间。而且作业是按开始时间排序的,所以t1很抱歉,我现在没有更多的时间来解决这个问题。这里有一个想法,我认为它很适合动态编程。[事实上,我认为它是DP,但自从我上次研究这些东西以来,已经过去了将近二十年了…]

假设
T={t1,t2,…,tn}
的分区如下:

T = {t1, t2, ..., tn} = {t1, t2, ..., tk} U {tk+1, tk+2, ..., tn}
  = T1(k) U T2(k)
T2'(k)
成为
T2(k)
的子集,不包含重叠
T1(k)
的作业

opt(X)
成为
T
的子集
X
的最佳值。然后

opt(T) = min( opt( T1(k) ) + opt( T2'(k) )
其中最小值沿{1,2,…,n}中任何可能的
k取

当然,您需要递归地计算
opt()
,并考虑重叠


希望这有帮助

如果我假设你计算出每项工作的结束时间,并按照增加结束时间的顺序对工作进行排序,那么我最容易想到的是,尽管你可能可以使用相反方向的开始时间来实现同样的目标

按照增加结束时间的顺序考虑每个作业。对于每项工作,如果您决定从事该工作,请计算出您最多可以处理并包括该工作的最大工作数量。要解决这个问题,请查看您已经计算出的截至该作业开始时间的覆盖时间的答案,并找到覆盖最大作业数的答案。在处理你正在考虑的工作时,你能做的最好的事情就是一加上这个最大值

当您考虑所有作业时,您可以覆盖的最大数量是您在考虑任何作业时计算的最大数量。通过存储在计算特定作业可能的最大分数时标识的上一个作业,然后从具有最大分数的作业中跟踪这些指针,可以确定要执行哪些作业


考虑到n个作业,当你计算出每个作业的最佳可能得分时,你会回想最多N个先前计算的答案,所以我想这是O(n ^ 2)

你知道一个DP算法存在的事实吗?就像在“设计DP算法”的家庭作业中一样?是的,这是我在准备期末考试的一道题