Lec 18 动态规划IV:切割问题
[TOC]
Wraps in a <div class="vp-raw">
Outline
- 整数子问题
- 伪多项式时间
- 例子
- 切割杆问题
- 子集求和问题
- DP特性复习
切割杆问题
给定一个长度为L的杆,和不同长度
的杆的价值v( ), 目标:切割杆最大化切割杆价值
Ex: L = 7, v = [0, 1, 10, 13, 18, 20, 31,32]
贪心算法能获得最大价值吗?
- 不一定!
SRTBOT分析:
子问题:
: 切割长度 的杆能获得的最大价值,对于 成立 递归关联子问题解:
- 第一块为长度p(猜的!)
拓扑顺序
对
增长: 子问题 仅仅取决于严格递减的 ,所以不会成环。for = 0, 1..., L 子问题的DAG

基本情况
- x(0) = 0
原始问题:
- 长度为L的切割杆的最大价值是x(L)
时间分析
- 子问题数量: L+1
- 每个子问题的工作量: O(
) = O(L) - O(
) 运行时间
- (强)多项式时间是指,运行时间被输入大小的常数次数多项式所界定,而输入大小以word(字数)计算(这里例子中,因此这些数字都可以在机器字中存储)
- 在杆切割问题中,输入大小是 L + 1 字(一个整数 L 和 在价值函数 v 的 L 个整数 )
- O(L²) 是 L + 1 的常数次数多项式,因此答案是:是的,(强)多项式时间
子集求和
- 输入: n个正整数序列
- 输出: 是否在存在A的子集,使其求和恰好等于T?即是否存在A的子集A',使得
? - Ex: A = (1, 3, 4, 12, 19, 21, 22), T = 47, 可以找到子集 A' = {3, 4, 19, 21}
- 这是个优化问题?
- 不是,这是一个决策问题。答案是YES or NO, Ture or False,而不是求最大值最小值这类优化问题。
SRTBOT分析
子问题:
= A[i:]的子集求和为t ,
递归关联子问题解:
- 思路:第一项
是否在A合法子集S内(Guess!) - 如果是,用剩余项尝试求和成
- 如果不是,用剩余项尝试求和成t
- 思路:第一项
拓扑顺序
- 子问题x(i, t)仅仅依赖更大索引的子问题x(i+1, t)或者x(i+1, t-A[i])
- 解决问题可以按照i严格递减的顺序(即从大到小)
基本情况
原始问题
x(0, T)
解决所有子问题的DGA
至底向上

至顶向下

时间分析
- 子问题数目O(nT), 每个子问题工作量为O(1),因此需要O(nT)时间
这是多项式时间吗?
- 输入大小n+1:整数T和A里面的n个整数
- O(nT)被n+1的多项式界定吗?
- n和T的关系未知,T可能是n,n^2
- 在w-bit的Word-RAM 模型, 已知
, ,但是可能w >> log n,我们并不知道w的上界 - e.g. w=n 也是不合理的,运行时间就成了
, 这是指数级的
- e.g. w=n 也是不合理的,运行时间就成了
伪多项式
- 算法的伪多项式时间:运行时间上界由输入大小和输入整数的常次数多项式界定
- 如果整数在输入大小上是多项式有界的,即
(与基数排序在 时间内运行的情况相同),那么这种算法在这种情况下是多项式的 - 计数排序O(n+u),基数排序
,直接访问数组构建O(n+u),斐波那契O(n)都是伪多项式算法 - 计数排序是弱多项式(基于强多项式和伪多项式之间的概念): 在以位数测量的输入大小(即输入整数的对数)上界由常数次多项式界定
- 与切割杆问题相比,它是多项式的
- 对L有伪多项式以来
- 但幸运的是也有L个输入整数
- 如果仅给出可销售杆长度的子集(背包问题,它推广了杆切割和子集和问题——见课堂讨论),那么算法将仅是伪多项式的
复杂度
- 当整数不是多项式有界时,子集和问题可以在多项式时间内解决吗?
- 如果 P ≠ NP,则不行。那是什么意思?下节课再讲!
总结动态规划特性
如何定义子问题
前缀、后缀问题:最大公共子序列,最大递增子序列
子串问题: 交替硬币游戏,括号问题
整数子问题:切割杆问题,子集和问题,斐波那契数列;
多字符串问题:最大公共子序列
顶点问题: SPS
子问题约束/扩展
- 非可扩展的限制: 最大递增子序列
- 2x:交替硬币游戏,括号问题
- θ(1)x: 钢琴指法问题
- θ(x)x: Bellman-Ford
递归关联子问题(如果子问题定义是正确的,那么你可以写出一个递归关系)
- θ(1) 分支: 斐波那契数列, 保龄球得分问题, LCS,ACG,Floy-wareshall
- θ(degree) 分支: DAG, Bellman-ford
- θ(n) branching: LIS, 括号问题, Rob Cutting
- combine multiple sulution(not path in DAG): Fib, FW,括号
Original: combine multiple subprobs: DAG, LIS, B-F, F-W