在传统的加权区间调度问题中,我们有一个列表{i_1, ..., i_n}
的区间,权重为w_j
。求解加权区间调度问题的算法here是一个基本的动态规划问题。然而,如果在计划中,所选间隔的权重取决于它之前的间隔的权重(并且反过来,使得权重取决于顺序),会发生什么?一个例子是w_j' = w_j'*(w_(j-1)' + 1)
,其中引用的变量是内在权重,未引用的权重是考虑到顺序的“实际”权重,即实际用于目标函数的权重。这个问题NP难吗?听起来确实如此。
编辑:为了使这更容易(也是现实的),让我们假设离散的单位时间。
答案 0 :(得分:0)
好吧,我明白了。算法是(如果我错了,请纠正我):
for t in times:
if is_first(t):
best_candidate = None
else:
best_candidate = best(t - 1)
for interval in intervals if interval.end_time is t:
value_i = f(best(interval.start_time) + interval)
value_candidate = f(best_candidate)
if value_i > value_candidate:
best_candidate = best(interval.start_time) + interval
best(t) = best_candidate
return best(times[-1])
其中集合times, intervals
是间隔的潜在时间间隔,而间隔本身和f
是目标函数。
迭代之间的常数是:在完成时间t
的迭代之后,best(t)
是以t
结尾的最佳计划。请注意,由于初始化步骤,best(t) == best(t - 1)
是可能的。另请注意,与我的评论一样,这只适用于f
单调增加的情况,因为f
应根据之前的时间间隔应用于每个单独的时间间隔。我以这里的方式使用它作为速记。