Algorithm 无权区间调度的动态规划算法?
我想知道是否有人能帮我解释一下未加权间隔调度的DP算法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
给出了两个数组[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()
,并考虑重叠
希望这有帮助 如果我假设你计算出每项工作的结束时间,并按照增加结束时间的顺序对工作进行排序,那么我最容易想到的是,尽管你可能可以使用相反方向的开始时间来实现同样的目标 按照增加结束时间的顺序考虑每个作业。对于每项工作,如果您决定从事该工作,请计算出您最多可以处理并包括该工作的最大工作数量。要解决这个问题,请查看您已经计算出的截至该作业开始时间的覆盖时间的答案,并找到覆盖最大作业数的答案。在处理你正在考虑的工作时,你能做的最好的事情就是一加上这个最大值 当您考虑所有作业时,您可以覆盖的最大数量是您在考虑任何作业时计算的最大数量。通过存储在计算特定作业可能的最大分数时标识的上一个作业,然后从具有最大分数的作业中跟踪这些指针,可以确定要执行哪些作业