具有可变权重的加权区间调度

时间:2013-08-13 18:29:35

标签: algorithm scheduling intervals

在传统的加权区间调度问题中,我们有一个列表{i_1, ..., i_n}的区间,权重为w_j。求解加权区间调度问题的算法here是一个基本的动态规划问题。然而,如果在计划中,所选间隔的权重取决于它之前的间隔的权重(并且反过来,使得权重取决于顺序),会发生什么?一个例子是w_j' = w_j'*(w_(j-1)' + 1),其中引用的变量是内在权重,未引用的权重是考虑到顺序的“实际”权重,即实际用于目标函数的权重。这个问题NP难吗?听起来确实如此。

编辑:为了使这更容易(也是现实的),让我们假设离散的单位时间。

1 个答案:

答案 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应根据之前的时间间隔应用于每个单独的时间间隔。我以这里的方式使用它作为速记。