浅谈四边形不等式

四边形不等式

对于fi=min(fj+w(j,i))

若满足w(a,d)+w(b+c)w(a,c)+w(b,d),abcdf满足决策单调性

fifj+w(i,j)

pii的最优决策点

fi=fpi+w(pi,i)fpi+1+w(pi+1,i)

fi+1=fpi+1+w(pi+1,i+1)fpi+w(pi,i+1)

两式相加即w(pi,i)+w(pi+1,i+1)w(pi,i+1)+w(pi+1,i)

a=pi,b=pi+1,c=i,d=i+1,即可得pipi+1,由此p单调不降

再形式化一点,实际上只需满足w(i,j+1)+w(i+1,j)w(i,j)+w(i+1,j+1)即可

综合来看,这其实就是相交小于包含

当然,如果是max,或则是不等号取反,就是单减的决策点

分治

如果有决策单调性,且没有后效性

设计函数sovle(L,R,l,r)表示[L,R]一段的决策点为(l,r)

如果mid的最优决策点为P,则递归处理solve(L,mid1,l,P),solve(mid+1,R,P,r)

时间复杂度同整体二分

二分

由于决策点序列是单增,对于决策点i>j,可以用二分找到第一个使得i更优的点

具体的用队列维护一个三元组(l,r,p)表示p能影响l,r

队头就是当前能覆盖i的第一个,队列里的元素的l都是前一个l+1,队尾的rn

寻找i的最优决策点时,因为i单调,所以可以弹出无用对头

考虑i作为决策点,因为i在最后,所以把i决策点加入队尾,如果在队尾的l时队尾劣于i,则直接弹出队尾

否则用二分找i第一个影响的位置并塞入队尾

对于决策递减的

分治法就是左右交换

二分法首先要处理1的最优决策点,然后考虑用栈维护就可以了

常见满足四边形不等式

1.可以用单调队列,斜率优化的

2.ij

3.区间不同个数,区间数的对数

4.|aiaj|p


__EOF__

本文作者Yukino
本文链接https://www.cnblogs.com/kid-magic/p/16897001.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   kid_magic  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示