题目要求:
求区间图的最大加权独立集。(选择一部分互不重叠的区间,使得被选出来的区间权重之和最大)
图一
题目分析:
这类问题可以归结为区间调度问题,这是其中最普通的一类,即加权最大区间调度问题,其求解思路可以通过求最多区间调度(贪婪算法dp[i-1] = dp[i]),无权最大区间(权值为1的动态规划)依次发展过来,其具体思路分析详见http://blog.csdn.net/yutianzuijin/article/details/45116705#。我也从博客中转载了这篇文章,http://blog.csdn.net/lukas_sun/article/details/53770959。向原作者致敬!
题目求解:
求解最大权值区间的必要条件就是各最优区间互不冲突,这是这类调度问题共同的影子,只不过它的目标是让各区间的权值和最大。
和所有这种规划问题相同,我们需要对所有区间进行排序,排序原则为结束时间的先后,因为用开始时间排序无法得到各区间明确界限。
首先规定几个记号
O(j): 需求区间{ 1……j }的最优解集
p ( n ): 最大的满足不与第n个区间冲突的区间号
OPT( j ): O( j )的最优解值。
由此定义可以分析得到第p(n)+1, p(n)+2 ,p(n)+3…………n-1个区间都与第n个区间冲突,所以O一定包含对需求区间{1,……p(n)}的最优解(否则可以将其替换成最优解而不影响需求区间n),由于p(n) <= n-1,所以如果n不包含在O里,则其可以转化为对需求区间 {1……n-1}的求解。
则我们的递推模型可以以是否选择第j个区间为构造依据。
按照此递推公式可知求解过程:
OPT(3)= 3 (2,3)
OPT(5)= 5+OPT(0)=