「DP 浅析」四边形不等式优化
下面的证明的思想多数为数学归纳、分类讨论或反证法。
简述
定义 \(w(i,j)\) 为一个定义在 \(\mathbb{Z}\) 上的二元函数,有如下定义:
定义 1:如果对于任意 \(\ell_1\leq \ell_2\leq r_1\leq r_2\),都有
\[ w(\ell_1,r_1)+w(\ell_2,r_2)\leq w(\ell_1,r_2)+w(\ell_2,r_1) \]
\(w\) 满足四边形不等式(即“交叉小于包含”),如果等号始终成立,那么称 \(w\) 满足四边形恒等式。
定义 2:如果对于任意 \(\ell\leq\ell'\leq r'\leq r\),都有 \(w(\ell,r)\geq w(\ell',r')\) 成立,那么则称 \(w\) 对于区间包含关系具有单调性。
定理 1:如果对于定义域上任意 \(\ell<r\),都有
\[ w(\ell, r)+w(\ell+1,r+1)\leq w(\ell,r+1) + w(\ell+1,r) \]
成立,那么 \(w(\ell,r)\) 满足四边形不等式。
证明:先来证明对于任意 \(\ell_1\leq\ell_2\leq r_1\),都有
\[ w(\ell_1,r_1)+w(\ell_2,r_1+1)\leq w(\ell_1,r_1+1)+w(\ell_2,r_1).\tag1 \]
对于 \(i=\ell_2-\ell_1\) 进行归纳,显然当 \(i=0\) 时上式成立,下面证明对 \(i\in[1,r_1-\ell_1]\) 成立。
首先根据归纳假设,
\[ w(\ell_1,r_1)+w(\ell_1+i-1,r_1+1)\leq w(\ell_1,r_1+1)+w(\ell_1+i-1,r_1),\tag2 \]
因为 \(i\leq r_1-\ell_1\),于是有 \(\ell_1+i-1<r_1\),应当有
\[ w(\ell_1+i-1,r_1)+w(\ell_1+i,r_1+1)\leq w(\ell_i+i,r_1)+w(\ell_1+i-1,r_1+1),\tag3 \]
将 \((2)\) 与 \((3)\) 左右两边分别相加,于是有
\[ w(\ell_1,r_1)+w(\ell_1+i,r_1+1)\leq w(\ell_1+1,r_1+1)+w(\ell_1+i,r_1), \]
于是对于 \(\forall\ell_1,\ell_2,r_1\in\mathbb Z,\ell_1\leq\ell_2\leq r_1\),\((1)\) 都成立。
在上面的基础上,我们再来证明对于 \(\forall\ell_1,\ell_2,r_1,r_2\in\mathbb Z,\ell_1\leq\ell_2\leq r_1\leq r_2\),都有四边形不等式成立。同理,对 \(j=r_2-r_1\) 进行归纳,显然当 \(j=0\) 时四边形不等式成立,下面对于 \(j>0\) 的情况进行证明。
首先根据归纳假设,有
\[ w(\ell_1,r_1)+w(\ell_2,r_1+j-1)\leq w(\ell_1,r_1+j-1)+w(\ell_2,r_1),\tag4 \]
因为 \(r_1+j-1\geq\ell_2\geq\ell_1\),根据 \((1)\),应当有
\[ w(\ell_1,r_1+j-1)+w(\ell_2,r_1+j)\leq w(\ell_1,r_1+j)+w(\ell_2,r_1+j-1)\tag5 \]
将 \((4)\) 与 \((5)\) 左右两边分别相加可得
\[ w(\ell_1,r_1)+w(\ell_2,r_1+j)\leq w(\ell_1,r_1+j)+w(\ell_2,r_1), \]
于是假设成立,即四边形不等式成立。
应用
优化 2D1D 动态规划
区间型 DP
常见的一种动态规划的状态转移方程为
\[ f_{\ell,r}=\min\limits_{\ell\leq k<r}\{f_{\ell,k}+f_{k+1,r}\}+w(\ell, r), \qquad(1\leq\ell<r\leq n) \]
直接简单实现上面的转移,那么时间复杂度为 \(O(n^3)\),如果 \(w(l,r)\) 满足一些特殊性质,那么我们可以用四边形不等式对其进行优化。
定理 2:如果 \(w(\ell, r)\) 满足四边形不等式且对于区间包含关系具有单调性,那么状态 \(f_{l,r}\) 满足四边形不等式。
证明:定义 \(g_{k,\ell,r}=f_{\ell,k}+f_{k+1,r}+w(\ell, r)\),表示决策点为 \(k\) 时的状态值,任取 \(\ell_1\leq\ell_2\leq r_1\leq r_2\),记 \(u=\mathop{\arg\min}\limits_{\ell_1\leq k<r_2}\ g_{k,\ell_1,r_2},v=\mathop{\arg\min}\limits_{\ell_2\leq k<r_1}\ g_{k,\ell_2,r_1}\),分别表示 \(f_{\ell_1,r_2}\) 和 \(f_{\ell_2,r_1}\) 的最小最优决策点。
首先,如果 \(\ell_1=\ell_2\),那么显然成立,然后考虑对于 \(r_2-r_1\) 进行归纳,显然当 \(r_2-r_1=0\) 时成立。
\(\ell_1<\ell_2=r_1<r_2\) (\(w\) 需要对于区间包含关系具有单调性)
若 \(u<r_1\),则 \(f_{\ell_1,r_1}\leq f_{\ell_1,u}+f_{u+1,r_1}+w(\ell_1,r_1)\),根据归纳假设,有 \(f_{u+1,r_1}+f_{\ell_2,r_2}\leq f_{u+1,r_2}+f_{\ell_2,r_1}\),两式相加即得
\[ f_{\ell_1,r_1}+f_{\ell_2,r_2}\leq f_{u+1,r_2}+f_{\ell_2,r_1}+f_{\ell_1,u}+w(\ell_1,r_1)\leq f_{\ell_2,r_1}+f_{\ell_1,r_2} \]
若 \(u\geq r_1\),则 \(f_{\ell_2,r_2}\leq f_{\ell_2,u}+f_{u+1,r_2}+w(\ell_2,r_2)\),根据归纳假设,有 \(f_{\ell_1,r_1}+f_{\ell_2,u}\leq f_{\ell_1,u}+f_{\ell_2,r_1}\),两式相加即得
\[ f_{\ell_1,r_1}+f_{\ell_2,u}\leq f_{\ell_1,u}+f_{\ell_2,r_1}+f_{u+1,r_2}+w(\ell_2,r_2)\leq f_{\ell_2,r_1}+f_{\ell_1,r_2} \]
\(\ell_1<\ell_2<r_1<r_2\)(\(w\) 仅需满足四边形不等式)
若 \(u\leq v\),则 \(l_1\leq u< r_1,\ l_2\leq v< r_2\),因此
\[ \begin{aligned} f_{l_1,r_1} \leq g_{u,l_1,r_1} &= f_{l_1,u} + f_{u+1,r_1} + w(l_1,r_1) \\ f_{l_2,r_2} \leq g_{v,l_2,r_2} &= f_{l_2,v} + f_{v+1,r_2} + w(l_2,r_2) \end{aligned} \]
再由 \(u+1 \leq v+1 \leq r_1 \leq r_2\) 和归纳假设知
\[ f_{u+1,r_1} + f_{v+1,r_2} \leq f_{u+1,r_2} + f_{v+1,r_1} \]
将前两个不等式累加,并将第三个不等式代入,可得
\[ \begin{aligned} f_{l_1,r_1} + f_{l_2,r_2} & \leq f_{l_1,u} + f_{l_2,v} + f_{u+1,r_1} + f_{v+1,r_2} + w(l_1,r_1) + w(l_2,r_2) \\ & \leq g_{u,l_1,r_2} + g_{v,l_2,r_1} = f_{l_1,r_2} + f_{l_2,r_1} \end{aligned} \]
若 \(v< u\),则 \(l_1\leq v<r_1,l_2\leq u<r_2\),因此
\[ \begin{aligned} f_{l_1,r_1} \leq g_{v,l_1,r_1} &= f_{l_1,v} + f_{v+1,r_1} + w(l_1,r_1) \\ f_{l_2,r_2} \leq g_{u,l_2,r_2} &= f_{l_2,u} + f_{u+1,r_2} + w(l_2,r_2) \end{aligned} \]
再由 \(l_1 \leq l_2 \leq v \leq u\) 和归纳假设知
\[ f_{l_1,v} + f_{l_2,u} \leq f_{l_1,u} + f_{l_2,v} \]
将前两个不等式累加,并将第三个不等式代入,可得
\[ \begin{aligned} f_{l_1,r_1} + f_{l_2,r_2} & \leq f_{l_1,u} + f_{l_2,v} + f_{v+1,r_1} + f_{u+1,r_2} + w(l_1,r_2) + w(l_2,r_1) \\ & \leq g_{u,l_1,r_2} + g_{v,l_2,r_1} = f_{l_1,r_2} + f_{l_2,r_1} \end{aligned} \]
综上所述,两种情形均有 \(f_{l_1,r_1} + f_{l_2,r_2} \leq f_{l_1,r_2} + f_{l_2,r_1}\),即四边形不等式成立。
定理 3:若状态 \(f\) 满足四边形不等式,记 \(m_{l,r}=\min\{k:f_{l,r} = g_{k,l,r}\}\) 表示最优决策点,则有
\[ m_{l,r-1} \leq m_{l,r} \leq m_{l+1,r} \qquad (l + 1 < r) \]
证明:记 \(u = m_{l,r},\ k_1=m_{l,r-1},\ k_2=m_{l+1,r}\),分情况讨论:
若 \(k_1>u\),则 \(u+1 \leq k_1+1 \leq r-1 \leq r\),因此根据四边形不等式有
\[ f_{u+1,r-1} + f_{k_1+1,r} \leq f_{u+1,r} + f_{k_1+1,r-1} \]
再根据 \(u\) 是状态 \(f_{l,r}\) 的最优决策点可知
\[ f_{l,u} + f_{u+1,r} \leq f_{l,k_1} + f_{k_1+1, r} \]
将以上两个不等式相加,得
\[ f_{l,u} + f_{u+1,r-1} \leq f_{l,k_1}+f_{k_1+1,r-1} \]
即 \(g_{u,l,r-1} \leq g_{k_1,l,r-1}\),但这与 \(k_1\) 是最小的最优决策点矛盾,因此 \(k_1\leq u\)。
若 \(u>k_2\),则 \(l\leq l+1 \leq k_2\leq u\),根据四边形不等式可得
\[ f_{l,k_2} + f_{l+1,u} \leq f_{l,u} + f_{l+1, k_2} \]
再根据 \(k_2\) 是状态 \(f_{l+1, r}\) 的最优决策点可知
\[ f_{l+1,k_2} + f_{k_2+1, r} \leq f_{l+1,u} + f_{u+1,r} \]
将以上两个不等式相加,得
\[ f_{l,k_2}+f_{k_2+1,r} \leq f_{l,u} + f_{u+1,r} \]
即 \(g_{k_2,l,r} \leq g_{u,l,r}\),但这与 \(u\) 是最小的最优决策点矛盾,因此 \(u \leq k_2\)。
因此,如果在计算状态 \(f_{l,r}\) 的同时将其最优决策点 \(m_{l,r}\) 记录下来,那么我们对决策点 \(k\) 的总枚举量将降为
\[ \sum_{1\leq l<r\leq n} (m_{l+1,r} - m_{l,r-1}) = \sum_{i=1}^n (m_{i,n} - m_{1,i})\leq n^2 \]
上式的第一个等号可以通过将两个 \(\Sigma\) 分别展开合并同类项得证。
另一形式
另一种常见的状态转移方程为
\[ f_{i,j}=\min\limits_{k\leq j}\{f_{i-1,k}+w(k,j)\},\qquad(1\leq i\leq n,1\leq j\leq m) \]
具有与上面同样的结论与性质。
优化 1D1D 动态规划
定理及证明
一种常见的状态转移方程为
\[ f_i=\min\limits_{0\leq j<i}\{f_j+w(i,j)\} \]
定理 4:若 \(w\) 满足四边形不等式,那么 \(f\) 具有决策单调性。
证明:设 \(p_i\) 为 \(f_i\) 的最优决策点,对于 \(\forall i\in[1,n],\forall j\in[0,p_i-1]\),有
\[ f_{p_i}+w(p_i,i)\leq f_j+w(j,i),\tag6 \]
\(\forall i'\in[i+1,n]\),由于 \(w\) 满足四边形不等式,于是有
\[ w(j,i)+w(p_i,i')\leq w(j,i')+w(p_i,i),\tag7 \]
将 \((6)\) 和 \((7)\) 左右两部分分别相加即得
\[ f_{p_i}+w(p_i,i')\leq f_j+w(j,i'), \]
也就说明了应有 \(p_{i'}\geq p_i\),即决策单调性。
实现
由于决策单调性,\(p\) 一定是一个非严格递增的序列,我们对 \(p\) 进行维护,即对于当前转移完的 \(i\),我们考虑从哪里开始 \(i\) 开始作为最优的决策点。
显然一种朴素的做法是直接在 \(p\) 上进行二分,找到对应位置 \(pos\),然后 \(\forall j\in[pos,n]\),将 \(p_j\) 修改为 \(i\)。
一种更为简洁的做法是,用一个队列维护 \(p\),利用 \(p\) 是一个非严格递增的序列的性质,每一段相同的用一个三元组 \((t_k,l_k,r_k)\),表示当前 \(\forall i\in[l_k,r_k],p_i=t_k\).
同时,如果一个三元组的右边界已经小于当前处理的位置,它一定不再有贡献,可以直接丢掉,于是就类似与单调队列,此时第一个合法的队头就是该位置的最优决策点。
考虑用 \(i\) 更新决策点的过程,我们按照以下步骤进行:
- 取出队尾的三元组 \((t_k,l_k,r_k)\);
- 若 \(f_i+w(i,l_k)<f_{t_k}+w(t_k,l_k)\),令 \(pos=l_k\),删掉该三元组,回到 1.
- 若 \(f_i+w(i,r_k)>f_{t_k}+w(t_k,r_k)\),直接到 5.
- 在 \([l_k,r_k]\) 上二分,找到第一个可行位置,更新为 \(pos\);
- 在队尾加入 \((i,pos,n)\);
整体时间复杂度为 \(O(n\log n)\).
参考资料
[2] 四边形不等式 - Pedesis