加权区间调度问题是这样的:给定一组加权区间,选择一组不重叠的区间,使总权重最大。加权区间 x 可以表示为三元组 x = (s, f, v),其中 s=x 的开始时间,f=x 的结束时间,v=x 的权重或值 这些加权区间可以表示为三元组 (0,3,3) (1,4,2) (0,5,4) (3,6,1) (4,7,2) (3,9,5) (5,10,2 ) (8,10,1) 编写一个程序来计算加权间隔调度问题的解决方案。这是图表的图片:http: //imgur.com/vZn04xn
程序应打印出最优解的总权重值和所选区间的指数。在上述情况下,输出将类似于(此输出不正确) 最佳值:7 间隔序列:2 5 程序必须使用递归。
计算最优值的算法是: 输入:n, s1,...,sn , f1,...,fn , v1,...,vn
按完成时间对作业进行排序,使 f1 > f2 >... > fn。计算 p(1), p(2), ..., p(n) 其中 p(j) = 最大索引 i < j 使得作业 i 与 j 兼容。
for j = 1 to n
M[j] = empty <-- solution table
M[j] = 0
M-Compute-Opt(j) {
if (M[j] is empty)
M[j] = max(wj + M-Compute-Opt(p(j)), M-Compute-Opt(j-1))
return M[j]
}
我创建了一个具有 3 个整数的类 Job:开始、完成和重量。我有一个类型工作的数组,每个位置的每个不同的间隔都在大小为 8 的数组中。问题:如何计算每个作业间隔的 p?