四边形不等式

【定义】

四边形不等式是对一个二元函数 w(l,r) 定义的。这个 w(l,r) 可以看作一段区间的 "代价"。

如果 l1l2r1r2,都有 w(l1,r1)+w(l2,r2)w(l1,r2)+w(l2,r1),称 w() 满足四边形不等式。
简记为 "交叉小于包含"。

同时有一个等价结论:w() 满足四边形不等式 w(l,r1)+w(l+1,r)w(l,r)+w(l+1,r1)

小结论:两个函数满足四边形不等式,它们的和也满足四边形不等式。


单调性:如果函数 wl1l2r1r2 都有 w(l2,r1)w(l1,r2),称 w 有单调性。

【三个模型】

四边形不等式的优化基于最早的最优决策点的位置变化。记 opt(l,r)fl,r 的最早的最优决策点。

【合并模型】

fl,r=minlk<r{fl,k+fk+1,r}+w(l,r)

条件:w 满足四边形不等式且满足单调性。

结论:f 满足四边形不等式;opt(i,j)opt(i,j+1)opt(i+1,j+1)(双单调性)。

有了这个结论,可以按照 rl+1 的大小枚举,因为 opt(l,r1)opt(l,r)opt(l+1,r),而 opt(l,r1),opt(l+1,r) 已经求出来了,所以可以直接枚举 [opt(l,r1),opt(l+1,r)] 中的每个数作为决策位置求最优。

对于 rl+1 固定的情况下,可以发现 [opt(l,r1),opt(l+1,r)] 恰好首尾相连拼出来一个 O(n) 的区间。所以总复杂度 O(n2)

【分组模型】

fi,k=min0j<i{fj,k+w(j,i)}

有的可能是 +w(j+1,i) 不过不影响。

条件:w 满足四边形不等式且满足单调性。

结论:opt(i,j1)opt(i,j)opt(i+1,j)

可以类似上面合并模型得到 O(n2) 的方法。

这里有另外一种方法:二分队列。用一个队列维护若干个区间,每个区间都是一段极大的决策点。每加入一个新决策点,从后往前检查每个旧决策点,看新决策点是不是更优;如果是一部分优,一部分不优,就二分找到分割点,改一下。复杂度 O(nlogn)

还有另外一种方法:分治。假如当前求 f[lr][k],备选决策区间为 [ql,qr]。把 [ql,qr] 扫一遍,找到 f[mid][k] 的最优决策点 p。则 f[lmid1][k] 的决策区间为 [ql,p],另一边同理。每一层 O(n),递归层数 O(logn),所以求 f[][k] 的复杂度 O(nlogn)。总复杂度 O(nklogn)

【1d1d 模型】

fi=min0j<i{fj+w(j,i)}

条件:w 满足四边形不等式。

结论:opt(i)opt(i+1)

做法类似上面。

posted @   FLY_lai  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示