DP优化

通常来说从决策数量上来优化Dp有以下几种方法:

斜率优化

用于优化带多项式的乘积项的状态转移方程,即f[i]=min/max{f[j]+(x[i]-x[j])^2} 这样的,

我们把他展开可以得到f[i]=min/max{f[j]+x[i]^2+x[j]^2-2*x[i]*x[j]

根据动规方程状态i从状态j转化而来,

我们可以化成类似f[i]=(f[j]+…)+(-i*f[i-1]*f[j])+(i+…)的形式 

其中蓝色部分只与j有关红色部分与i,j有关绿色部分只与i或常数有关 

我们可以固定i,故变形为 

f[i]-i-…=(f[j]+…)+(-i*f[i-1]*f[j]) 

考虑几何意义, 

蓝色部分为y红色部分中的i部分为导数k,红色部分中j部分为x绿色部分只是常数,在几何意义上只是截距,与单调性无关,可以设为B 

故得y=kx-B 

这样就可以利用线性规划来做了,

容易发现无论一次函数的斜率怎么变,截距最小时取的点一定是那所有点求出的下凸壳上的某一个点。 因此我们只要每次在上边寻找最优解,然后加点时维护这个下凸壳即可。 根据斜率和(x,y)的单调性不同有不同的维护方法。

四边形不等式优化

下面我们通过四边形不等式来优化上述方程,首先介绍什么是”区间包含的单调性“和”四边形不等式“

(1)区间包含的单调性:如果对于i≤i'<j≤j',有w(i',j)≤w(i,j'),那么说明w具有区间包含的单调性。(可以形象理解为如果小区间包含于大区间中,那么小区间的w值不超过大区间的w值)

(2)四边形不等式:如果对于i≤i'<j≤j',有w(i,j)+w(i',j')≤w(i',j)+w(i,j'),我们称函数w满足四边形不等式。(可以形象理解为两个交错区间的w的和不超过小区间与大区间的w的和)

下面给出两个定理

定理一:如果上述的w函数同时满足区间包含单调性和四边形不等式性质,那么函数m也满足四边形不等式性质。

我们再定义s(i,j)表示m(i,j)取得最优值时对应的下标(即i≤k≤j时,k处的w值最大,则s(i,j)=k)。此时有如下定理

定理二:假如m(i,j)满足四边形不等式,那么s(i,j)单调,即s(i,j)≤s(i,j+1)≤s(i+1,j+1)。

好了,有了上述的两个定理后,我们发现如果w函数满足区间包含单调性和四边形不等式性质,那么有s(i,j-1)≤s(i,j)≤s(i+1,j)。即原来的状态转移方程可以改写为下式:

m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(s(i,j-1)≤k≤s(i+1,j))(min也可以改为max)

由于这个状态转移方程枚举的是区间长度L=j-i,而s(i,j-1)和s(i+1,j)的长度为L-1,是之间已经计算过的,可以直接调用。不仅如此,区间的长度最多有n个,对于固定的长度L,不同的状态也有n个,故时间复杂度为O(N^2),而原来的时间复杂度为O(N^3),实现了优化!今后只需要根据方程的形式以及w函数是否满足两条性质即可考虑使用四边形不等式来优化了。

 

猜你喜欢

转载自www.cnblogs.com/2020pengxiyue/p/9348530.html