DP优化
斜率优化
求\(f(i)=max\{f(j)+(s(i)-s(j))^2\}\),\(n\leq 10^6\).
其中\(\,s(x)\,\)是只和\(\,x\,\)有关的单调减函数,可以快速计算
显然我们不能\(\,\Theta(n^2)\,\)暴力计算,考虑减少决策数,化简得:
由于考虑优化决策,把\(\,j\,\)单独提出:
考虑两个决策\(\,j,k\,\)何时是\(\,j\,\)更优:
令
则
不难发现\(\,F(j),F(k),s(j),s(k),s(i)\,\)都是定值
对于每个决策\(\,j\,\),使其对应一个定点\(\,(s(j),F(j))\,\),则\(\,\frac{F(j)-F(k)}{s(j)-s(k)}\,\)为\(\,j,k\,\)间斜率
考虑维护斜率,画图手玩不难发现(我懒得画图),其实就是维护一个上凸包,如果是小于等于则是下凸包,关于如何维护,我们等会再讲,先考虑答案的处理
注意到,对于最优的\(\,j\,\),有
其中\(\,s^2(i)\,\)是常数,可以忽略,设
设\(\,y=kx+b\,\)过点\(\,(0,-K(i)s(j)+y(j)),(s(j),y(j))\,\),联立得
解得
发现这是不受决策影响的,而答案就是\(\,b\),要最大化\(\,b\,\)就是在凸包上找一个点使得其截距最大,显然可以三分
接下来考虑如何维护凸包
对于新插入的点,由于\(\,s(j)\,\)的单调性,一定是在结尾处插入,又因为有\(2s(j)\)的单调性,所以现在更劣的解一定不会在将来被选到,形式化地,我们有:
故而对于新插入的点,我们只需要依次遍历它之前的点,只到一个不可被删去的点,简单代换即可,证明如下:
可以发现,一个点只会被扫到\(\,\Theta(1)\,\)次,而凸包上找答案的复杂度是\(\,\Theta(log)\,\),所以总复杂度就是\(\,\Theta(n\log n)\,\)的
四边形不等式
用途
大概是可以把一些\(\,\Theta(n^3)\,\)时间填\(\,\Theta(n^2)\,\)的表的dp的时间优化到\(\,\Theta(n^2)\,\)
定义
如果
那么二元函数\(\,w\,\)被称为满足四边形不等式的
如果
那\(\,w\,\)被称为区间单调的
定义拓展
当且仅当
\(w\,\)满足四边形不等式
证明如下:
明天再证
优化方案
对于一个形如\(f_{i,j}=min\{f_{i,k}+f_{k,j}+w_{i,j}\}\),令\(\,p_{i,j}\,\)表示\(\,f_{i,j}\,\)最优的决策点
不难证得:若\(\,w\,\)满足四边形不等式,那么\(\,f\,\)也满足四边形不等式
那么
利用决策单调性即可将时间优化至\(\,\Theta(n^2)\,\)
单调性的证明等我学会了就写