Skip to content

算法Algorithm

决策单调的分治 DP 优化

Divide-and-conquer DP optimization

在已证明最优切点单调的分层递推中,先求中间状态,再用它收紧左右候选区间,逐层安全省去转移。

形式陈述 ​

一种常见的分层动态规划是

Dt[j]=mint−1≤k<j{Dt−1[k]+C(k,j)},t≤j≤n.

设 n≥1,所求层数 1≤K≤n。这里 k 是最后一段开始前的切点,t 表示恰好分成 t 个非空连续段。初始化 D0[0]=0,其余不可行状态为 +∞。上一层应已全部算完,并假定每个 C(k,j) 可在常数时间求值。

对每个状态取最小下标的最优切点 pt[j]。若已证明

pt[j]≤pt[j+1],

就可以用分治 DP 优化求这一层。过程 solve(l,r,a,b) 的不变量是:区间 j∈[l,r] 的真正最优切点都在 [a,b] 内。取 q=⌊(l+r)/2⌋,扫描

k∈[a,min(b,q−1)]

求得 Dt[q] 与最左最优切点 p,再递归调用 solve(l,q-1,a,p) 和 solve(q+1,r,p,b)。首次调用为 solve(t,n,t-1,n-1),空状态区间立即返回。

这是利用决策次序的算法,不是仅凭递推含有一个 min 就可使用的通用模板。前提只要求当前层的最左极小列单调,比矩阵全单调性弱。

直觉

分治在这里先问中间终点应该在哪里切。如果它的最佳切点是 p,左边状态的最佳切点不能越过 p,右边状态的最佳切点不能退到 p 左边。一次完整扫描换来了两片可以永久跳过的候选区。

正确性沿递归树归纳。根结点的候选范围包含全部合法切点;父结点扫描得到真正的中间最优解,单调性保证两个孩子收紧后的范围仍包含各自真解。每一层都保持这个不变量,叶子因此也正确。统一取最左最优切点,使边界 p 在平局时有确定含义。

中间决策收紧两侧候选
例子与边界

十二项工作量的第二层 ​

取

w=(2,0,3,1,4,2,0,5,1,3,2,1),

前缀和为

S=(0,2,2,5,6,10,12,12,17,18,21,23,24),

费用 C(k,j)=(Sj−Sk)2。第一层只有切点零,所以 D1[j]=Sj2。第二层首次处理终点 j=2,…,12,中点为 7,扫描切点 1,…,6,候选值依次为

104,104,74,72,104,144.

因此 D2[7]=72、p2[7]=4。左侧终点 2..6 只需保留切点上界 4;右侧终点 8..12 只需保留下界 4。

下一步,左子问题中点 j=4 扫描 k=1,2,3,费用为 20,20,26,取最左切点 1;右子问题中点 j=10 扫描 k=4,…,9,最优切点为 5,费用 221。继续递归,第二层得到

D2[2..12]=(4,13,20,50,72,72,149,164,221,265,288),p2[2..12]=(1,1,1,3,4,4,5,5,5,6,6).

重复前缀和带来真实平局:S1=S2=2,所以在 j=4 时切点 1,2 同费。代码必须保留较小者,不能让循环顺序偶然决定输出。

单调性从哪里来 ​

非负 wi 使 S 非降。候选矩阵 Mj,k=Dt−1[k]+(Sj−Sk)2 在四个有限可行格子上满足Monge 四点不等式,因为其四点差为 −2(Sj′−Sj)(Sk′−Sk)≤0。

若相邻两行最优切点逆序,设较早行选右列 b、较晚行选左列 a<b。两个切点在较早行都合法,且上层费用有限,于是上述四点不等式适用。上行最左规则使右列严格优于左列,Monge 性迫使下行仍严格偏好右列,矛盾。这直接证明了递归所需的单调性,也照顾了 k<j 的阶梯边界。

负工作量给出的失败证书 ​

若改成 w=(−1,−2,−2,2),前缀和为 (0,−1,−3,−5,−3)。第二层终点 2,3,4 的最左切点是 (1,2,1),发生倒退。正确费用为 (5,13,5)。

分治先求中点 j=3,得到切点 2,随后错误地要求 j=4 只能从 k≥2 转移,漏掉真正的切点 1,返回 9。错误不是浮点误差,也不是递归边界少一格,而是输入失去已证明的结构。允许任意查询顺序的Li Chao 树仍可利用平方展开处理这一例。

推论与应用

固定递归深度时,各结点的候选区间有序相接,只有端点可能重叠,总扫描长度为 O(n);递归深度 O(log⁡n),故一层 O(nlog⁡(n+1)),K 层为 O(Knlog⁡(n+1))。只求值可用两行 O(n) 存储与 O(log⁡n) 栈;要一次性保存完整分段回溯表,则需 O(Kn) 个切点。

若费用矩阵更强地满足全单调性,且能随机访问表项,SMAWK可以进一步把每层求值降为线性。若费用展开成直线查询,单调直线下包络也是另一条路。分治法的优点是直接使用最优切点次序,不要求每个费用都具有直线形式。

测试时应把每层每个值和最左切点都与朴素递推比较。只比最终最小费用可能漏掉中间切点错误,直到后续某次重建才暴露。随机含零负载、全零负载、K=1、K=n,以及故意破坏单调性的输入,各自检验不同的边界。

参考资料
  • UNSW COMP4128, Dynamic Programming II, 2021, “Divide and Conquer Framework” and “Proof of Monotonicity of opt”, slides 57–89:官方讲义。候选范围收紧、递归层计数与交换证明。
  • F. Frances Yao, Efficient Dynamic Programming Using Quadrangle Inequalities, 1980, §2:原技术报告。四点不等式与最优决策次序。
关系图谱5 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系