【算法讲解】DP优化——四边形不等式优化

前言

此优化策略由高德纳和姚期智发现并证明,故学名称之为 Knuth-Yao Speedup
(Knuth 是算法届的鼻祖,对于算法新手来说,KMP一定不陌生,Knuth 就是三个联合发明人之一的 K;Yao 就是清华姚班的姚期智)
证明过程中依赖四边形不等式,所以也俗称四边形不等式优化
适用于当 dp 方程、转移函数符合一定特征时,可以将复杂度降低一个维度
属于非常难的 dp 优化,Codeforces 中需要应用此类优化的题目至少是 2400 分以上
证明非常困难,如果前置没有掌握这个知识点,遇到相应的题是无论如何都做不出的

背景

最初发明这个算法的动机,是为了解决最佳二叉搜索树(Optimal Binary Search Tree)问题(OBST 会在其他文章中详细介绍,此处不展开)
朴素的 OBST 问题的解法是 O ( n 3 ) O(n^3) O(n3)
Knuth 在1971发现发现当符合某种条件下(见下文的DP策略优化),可以让复杂度降为 O ( n 2 ) O(n^2) O(n2)

  • o p t ( i , j − 1 ) ≤ o p t ( i , j ) ≤ o p t ( i + 1 , j ) opt(i,j-1) \le opt(i,j) \le opt(i+1,j) opt(i,j1)opt(i,j)opt(i+1,j)

Yao 在1980年进一步发现下文的推论2和推论3:

  • c ( i , j ) c(i,j) c(i,j) 符合四边形不等式 ⟹ d p ( i , j ) \Longrightarrow dp(i,j) dp(i,j) 也符合四边形不等式
  • d p ( i , j ) dp(i,j) dp(i,j) 符合四边形不等式 ⟹ o p t ( i , j − 1 ) ≤ o p t ( i , j ) ≤ o p t ( i + 1 , j ) \Longrightarrow opt(i,j-1) \le opt(i,j) \le opt(i+1,j) opt(i,j1)opt(i,j)opt(i+1,j)

既只要 c ( i , j ) c(i,j) c(i,j) 符合四边形不等式,就可以将 OBST 的复杂度降低到 ( n 2 ) (n^2) (n2)

问题描述

我们将问题简化,就不直接从 OBST 开始推演,直接给出 dp 方程,OBST 到 dp 方程的推演会在其他文章中介绍

对于下述 dp 方程, d p ( l , r ) dp(l,r) dp(l,r) 代表状态, c ( l , r ) c(l,r) c(l,r) 代表状态转移的代价 cost( O ( 1 ) O(1) O(1)的复杂度可以计算得到)
d p ( l , r ) = { min ⁡ k ∈ [ l , r ) { d p ( l , k ) + d p ( k + 1 , r ) } + c ( l , r ) , l < r 0 , l = r ∞ , l > r dp(l,r) = \left\{ \begin{aligned} \min \limits_{k\in [l,r)}\{dp(l,k) + dp(k+1,r)\} + c(l,r),l<r \\ 0,l=r \\ \infty,l>r \end{aligned} \right. dp(l,r)= k[l,r)min{ dp(l,k)+dp(k+1,r)}+c(l,r),l<r0,l=r,l>r
用朴素的方式直接实现,因为有 O ( n 2 ) O(n^2) O(n2)个状态,每次状态转移需要从 l l l遍历到 r r r,也就是 O ( n ) O(n) O(n)的开销,所以整体复杂度是 O ( n 3 ) O(n^3) O(n3)

但是如果 c ( l , r ) c(l,r) c(l,r)满足一下两个特性,则可以将复杂度从 O ( n 3 ) O(n^3) O(n3) 优化成 O ( n 2 ) O(n^2) O(n2)

  • 区间单调性:对于任意的 l ≤ l ′ ≤ r ′ ≤ r l\le l' \le r' \le r llrr,满足 c ( l ′ , r ′ ) ≤ c ( l , r ) c(l',r')\le c(l,r) c(l,r)c(l,r)
    除了 c ( l ′ , r ′ ) ≤ c ( l , r ) c(l',r')\le c(l,r) c(l,r)c(l,r) 之外,还很容易推演出如 c ( l ′ , r ′ ) ≤ c ( l ′ , r ) , c ( l , r ′ ) ≤ c ( l , r ) c(l',r') \le c(l',r),c(l,r')\le c(l,r) c(l,r)c(l,r),c(l,r)c(l,r)
  • 四边形不等式:对于任意的 l ≤ l ′ ≤ r ′ ≤ r l\le l' \le r' \le r llrr,满足 c ( l , r ′ ) + c ( l ′ , r ) ≤ c ( l , r ) + c ( l ′ , r ′ ) c(l,r')+c(l',r)\le c(l,r)+c(l',r') c(l,r)+c(l,r)c(l,r)+c(l,r)

推论1

对于任意的 l ≤ k < r l\le k <r lk<r,以下不等式必定成立
d p ( l , r ) ≤ d p ( l , k ) + d p ( k + 1 , r ) + c ( l , r ) dp(l,r) \le dp(l,k) + dp(k+1,r)+c(l,r) dp(l,r)dp(l,k)+dp(k+1,r)+c(l,r)

证明

非常直观,在上述dp的定义中, d p ( l , r ) dp(l,r) dp(l,r) 是枚举所有 k k k计算所得的最小值,也就是说对于任意的 k k k d p ( l , k ) + d p ( k + 1 , r ) + c ( l , r ) dp(l,k) + dp(k+1,r) + c(l,r) dp(l,k)+dp(k+1,r)+c(l,r)的计算结果一定大于等于 d p ( l , r ) dp(l,r) dp(l,r)
且至少一个 k k k会使上述不等式变成等式,我们将这个 k k k记为 d p ( l , r ) dp(l,r) dp(l,r)的最佳决策点(optimal decistion point),既:
o p t ( l , r ) ≔ min ⁡ l ≤ k < r { k ∣ d p ( l , r ) = d p ( l , k ) + d p ( k + 1 , r ) + c o s t ( l , r ) } opt(l,r)\coloneqq \min \limits_{l \le k <r} \{k|dp(l,r)=dp(l,k) +dp(k+1,r)+cost(l,r)\} opt(l,r):=lk<rmin{ kdp(l,r)=dp(l,k)+dp(k+1,r)+cost(l,r)}
所以当 k = o p t ( l , r ) k=opt(l,r) k=opt(l,r) 时,上述不等式变成等式,既
d p ( l , r ) = d p ( l , k ) + d p ( k + 1 , r ) + c ( l , r ) \begin{equation} dp(l,r) = dp(l,k) + dp(k+1,r)+c(l,r) \end{equation} dp(l,r)=dp(l,k)+dp(k+1,r)+c(l,r)

推论2

如果 c ( l , r ) c(l,r) c(l,r) 满足区间单调性四边形不等式,则 d p ( l , r ) dp(l,r) dp(l,r) 也满足四边形不等式,既
d p ( l , r ′ ) + d p ( l ′ , r ) ≤ d p ( l , r ) + d p ( l ′ , r ′ ) dp(l,r')+dp(l',r)\le dp(l,r)+dp(l',r') dp(l,r)+dp(l,r)dp(l,r)+dp(l,r)
我们将这个命题定义为 P ( r ) P(r) P(r)

证明

既,需要证明命题 P ( r ) P(r) P(r)成立

我们对 l ≤ l ′ ≤ r ′ ≤ r l\le l' \le r' \le r llrr 的根据是否相等的情况分四类进行讨论,分别证明:

  • l ′ = l l'=l l=l
    d p ( l , r ′ ) + d p ( l ′ , r ) = d p ( l , r ′ ) + d p ( l , r ) ⋯ 因为 l ′ = l = d p ( l ′ , r ′ ) + d p ( l , r ) ⋯ 因为 l = l ′ \begin{aligned} dp(l,r')+dp(l',r) &=dp(l,r')+dp(\textcolor{Red}{l},r) &\cdots 因为 l'=l\\ &=dp(\textcolor{Red}{l'},r')+dp(l,r) &\cdots 因为 l=l' \end{aligned} dp(l,r)+dp(l,r)=dp(l,r)+dp(l,r)=dp(l,r)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值