决策单调性优化

数学推导比较多。但是充斥着对称美。

单调队列/斜率优化,都是决策单调性优化。这篇主要说四边形不等式优化。

还没写完。


基本定义

四边形不等式:对于二元函数 wx,y,如果对于定义域内任意 abcd,都有 wa,b+wc,dwa,c+wb,d相交 包含),那么称 wi,j 满足四边形不等式。 (定义①)

等价转化

对于二元函数 wx,y,若对于任意 a<b,存在 wa,b+1+wa+1,bwa,b+wa+1,b+1,那么 wi,j 也满足四边形不等式。(定义②)

定义①通常用来推出某些结论,定义②通常用来证明某个二元函数满足四边形不等式。

证明等价:
对于 c>a,如果 c=a+1,则有:wa,c+1+wa+1,cwa,c+wa+1,c+1 成立,否则有:

wa,c+1+wa+1,cwa,c+wa+1,c+1wa+1,c+1+wa+2,cwa+1,c+wa+2,c+1

加起来得到:

wa,c+1+wa+2,cwa,c+wa+2,c+1

以此类推,得到对于任意 abc,有:

wa,c+1+wb,cwa,c+wb,c+1

故技重施。对于 c<maxn

wa,c+2+wb,c+1wa,c+1+wb,c+2

加起来得到:

wa,c+2+wb,cwa,c+wb,c+2

以此类推,得到定义①。

矩阵形式

对于 N×M 的矩阵 A 满足四边形不等式:

i1i2,j1j2,Ai1,j1+Ai2,j2Ai1,j2+Ai2,j2

那么称 A 是完全单调的。因为

Ai,j+Ai+1,j+1Ai,j+1+Ai+1,jAi,j+1Ai,jAi+1,j+1Ai+1,j

也即,A,jA,j+1 增长更快,如果第 i 行最小值在第 j 列取到,那么对于 i1>i,j1<j,有 Ai1,j1Ai1,j

这就是四边形不等式的本质,相交小于等于还是大于等于包含不重要,只是推出了一个矩阵的单调形式,放弃了很多没用的矩阵。
image

应用类型 I

考虑如下 dp 转移式子:

fi=min0j<i{fj+vj,i}

其中 v 满足四边形不等式。
那么:若对于 i,其决策点 p 比任意 k<p 都更优,那么对于 i>i,其决策点 p 比任意 k<p 都更优。

证明:

fp+vp,ifk+vk,ivk,i+vp,ivk,i+vp,i

相加得到

fp+vp,ifk+fk,i

不难得到推论,pi 单调增。

那么如何求出整个 DP 数组呢?可以从 O(n2) 优化到 O(nlogn)。方法叫做二分栈

我们考虑 p 数组,pi 表示考虑了目前算到的 DP 值,i 的最优决策。

一开始,计算出 f0,然后 p 数组长这样:0000000000

若干个数求完之后,数组可能变成了:0000111122
假设已经求完了 02 的所有 DP 值并放进数组中了,那么显然 p3 即为 3 的最优决策。以此计算 f3

考虑如何添加 f3 的贡献。找到一个位置,使得它之后所有数都应该填 3,例如 0000113333。这个有可二分性。但是暴力填写不行,复杂度退化为 O(n2)。怎么办?

考虑维护颜色段,类似珂朵莉树思想。用一个集合,元素为 (l,r,k),表示一段为 k 的区间。那么我们从右往左找到分割点所在区间,把右边的段全部删掉即可。已经算完的左边的点也删掉,避免污染。为什么不两层二分?实际上这个复杂度是最对的。因为最多只会有 n 段加入了,总共也就最多有 n 段被删除了。这个思想在 KMP 算法的时间复杂度证明中出现过,这里又出现了。

实现方面,用 deque。或者 list。后者,比较安全,但是不能随机访问。(这里不需要随机访问。)

应用类型 II

考虑如下 DP 转移式:

dpi,j=min0k<i{dpk,j1+vk+1,i}

其中 v 满足四边形不等式。易证对于每个 jdpi,j 满足决策单调性。

先介绍另一种方法,然后考虑这两种方法有什么不一样。这种方法叫分治。没错,分治博客里面有一个决策单调性的例题。现在知道了原理。(变成套路了捏)

考虑 solve(l,r,x,y) 表示计算 dplr,j 的值,决策点范围在 (x,y)。考虑计算出 mid 的决策点 k,然后 solve(l,mid1,x,k),solve(mid+1,r,k,y)。注意一下边界判断。

考虑时间复杂度。虽然带端点,但是端点计算次数是 O()=O(n) 的,所以还是 O(nlogn)

不同之处

第二种情况,是没有用到左边的 dp 值,直接先算出了右边的 dp 值的。而当遇到第一种情况那样,dp 值后来也是决策的时候,就不管用了。
因此用哪种方法,关键是看 dp 值在这一轮中会不会作为决策。

应用类型 III

考虑如下转移:

fi,j=minik<j{fi,k+fk+1,j+wi,j}

若满足以下三个条件

  • w 满足四边形不等式。
  • fi,i=wi,i=0
  • abcd,wadwbc(权值的区间包含关系)

那么 f 也满足四边形不等式。

证明:要证明对于任意 i<j,有 fi,j+1+fi+1,jfi,j+fi+1,j+1

首先证明 j=i+1 的情形。
j=i+1 的时候,fi,j+1+fi+1,j=fi,i+2+fi+1,i+1=fi,i+2。(第二个条件)
右边 =fi,i+1+fi+1,i+2
考虑 fi,i+2 的决策点是 i 还是 i+1

  1. 决策点是 i
    那么 fi,i+2=fi,i+fi+1,i+2+wi,i+2=fi+1,i+2+wi,i+2fi,i+1=wi,i+1wi,i+2,得证。
  2. 决策点是 i+1
    同法可得证。

然后证明,如果对于 ji<k 成立,那么对于 ji=k 也成立:
先考虑推得的定义①式子,我们需要使用它。显然,由归纳假设推得的定义①形式为:

abcd,ca<k,fa,d+fb,cfa,c+fb,d

做好了准备工作之后,我们考虑证明对于 ji=kfi,j+1+fi+1,jfi,j+fi+1,j+1

考虑 x,y 分别为 fi,j+1,fi+1,j 的最优决策点。那么有 ixj,i<y<j

考虑 x,y 大小关系:

  1. xy,那么 i<xj,i<y<j
    那么 y,x 也是 fi,j,fi+1,j+1 的一个决策。注意任意一个决策算出来的 f 值要小于最优决策。于是 fi,j+1+fi+1,j=fi,x+fx+1,j+1+wi,j+1+fi+1,y+fy+1,j+wi+1,jfi,j+fi+1,j+1fi,x+fx+1,j+wi,j+fi+1,y+fy+1,j+1+wi+1,j+1
    由于 w 满足四边形不等式, wi,j+wi+1,j+1wi,j+1+wi+1,j,那么要证明原式其实也就是证明 fx+1,j+fy+1,j+1fx+1,j+1+fy+1,j。由于 x+1y+1j<j+1,j(x+1)<k,这个式子是成立的。
  2. x>y,同法可证。

因此 f 满足四边形不等式。

推论:对于任意 i<j 有,pi,j1pi,jpi+1,j。(决策单调性)

证明:考虑右式,设 q=pi,j,那么对于任意 i<i+1kpfi,p+fi+1,kfi,k+fi+1,p。那么要证明对于 fi+1,jkp 要劣,也就是 fi+1,k+fk+1,j+wi+1,jfi+1,pfp+1,jwi+1,j0。由上面的式子可得。

因此考虑一个矩阵 p,一个格子上的点总是在它左边的点和下面的点中间。例如如下矩阵,标绿色的是参与计算的格子,那么 1 号格子 2 号格子 3 号格子。

image

因此在计算一个点的时候,缩小了枚举范围。事实上,把 O(n3) 优化到了 O(n2)。为什么呢?考虑格子 pi,j 的枚举长度为 pi+1,jpi,j1+1
那么每个格子被上面的格子 +1(如果有的话),被下面的格子 1(如果有的话)。

image

容易发现,因为 pi,jn,总共计算次数是 O(n2) 的。

posted @   OIer某罗  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示