决策单调性与四边形不等式

决策单调性与四边形不等式

本文抄写自 itst 21 年 apio 讲课课件。

其实主体是环上邮局。

前置定义

对于两种不同的决策单调性问题,我们有不太一样的做法。

  1. 离线问题

    考虑一个规模为 m×n 的 dp。

    fi,j=mink<jfi1,k+wk,j

    fi1 转移到 fi 是一个离线的问题。

  2. 在线问题

    考虑一个规模为 n 的 DP。

    fi=minj<ifj+wj,i

解决决策单调性问题一般方法

分治和二分栈在 OI 中应该已经够用了,它们的复杂度均为 O(nlogn)
存在 O(n+m(1+max(lognm,0))) 的 SMAWK 算法(离线情况),线性的 Wilber 算法(部分在线问题)和 Eppstein 算法(运用情景比肩二分栈)。

这里简单回顾一下二分栈算法。

增量加入每个决策点 i,维护出每个决策点作为最优决策点的管理 区间,由于决策单调性,这是一个栈的结构。
i 的 DP 值容易计算,考虑加入决策 i 对栈的影响:

  1. i 比栈顶的决策对于栈顶管辖的左端点来说更好,那么栈顶没用了,可以 pop 掉。
  2. i 比栈顶的决策对于栈顶管辖的右端点来说更差,那么 i 的管辖区间我们已经得到了,加入栈就行了。
  3. 否则,我们需要二分栈顶的管辖区间,找到 i 比栈顶好的最靠前的位置。

故复杂度 O(nlogn)

决策单调性最短路问题

这里指离线问题的那个 DP。我们以一个较为复杂的例子来探讨这个问题:

环上邮局

在一个长度为 L 的环上有 n 个村庄,修建 k 个邮局,要求只能修在整点,最小化每个村庄到其最近的邮局的距离和。输出方案。

一个基本的转化是枚举一个位置断环为链,转化成链上问题,即前文提及的离线问题,使用分治法,时间复杂度 O(n2klogn)

我们介绍 O(n2logWlogn),O(nlogWlogn+n2logn),O(nlogn(logn+logW)) 三种优化。

如果会写 SMAWK 和 Wilber 可以做到少一个 logn

答案凸性

定理:

f(k) 表示从 1n,经过 k 条边的最短路,f 在定义域内下凸,即 k[2,n2],f(k+1)f(k)f(k)f(k1)

那么我们可以使用 wqs 二分,结合二分栈完成这个问题,时间复杂度 O(n2logWlogn)

这部分的证明给出了构造方案的方法。

引理:

1s<r<tn1,f(s)+f(t)f(r)+f(s+tr)

显然引理成立代值即可得到上述定理。

f(s) 的一个最优方案是 p1p2ps+1
f(t) 的一个最优方案是 q1q2qt+1

v=rs,找到 i[1,s],满足 piqi+v<qi+v+1pi+1。可构造路径 p[1,i],q[i+v+1,t+1]q[1,i+v],pi+1,s+1。长度分别为 s+trr。(这样的 i 一定存在,证明考虑按 p 分段后一定有两个 q 落在一段。)
路径交错后改变量的式子形如一个四边形不等式(交叉小于等于包含),故引理成立。

我们考虑 wqs 二分结束后,我们不一定能恰好得到长度为 k 的路径方案,也有可能得到两组 p<k<q 的方案。
这里 p 是 DP 出来的最小分段方案,q 是最多。我们通过上述构造得到一组 k 的方案,我们可以说明其就是最优的。

路径单调性与不交性

定理:

对于有决策单调性的最短路问题,记 xp1q1 的长为 k 的字典序最小的最短路,yp2q2 的。
如果 p1p2,q1q2,那么 i[1,k+1],yixi

证明考虑反正,交错一下权值和不变大,而有一边字典序变小。

定理:

对于有决策单调性的最短路问题和 p[1,n2],记 xf(p) 的一个方案,yf(p+1) 的一个方案。
那么,i[1,k+1],yixi

话说这个为啥叫不交性啊,不是很懂。

证明考虑对 y[1,p+1]y[2,p+2] 使用路径单调性即得。

回到环上邮局,我们考虑断环为链后将链复制一遍,先跑出 0L 的长为 k 的字典序最小最短路 x
假设全局字典序最小的最短路是 yy1[0,L),yk+1=y1+L。那么显然 ykL,y1,y2,,yk 也是一个 ykLyk 的最短路。

对这两条最短路分别与 x 运用路径单调性,yi[xi,xi+1]。也就是存在最优解在每一段中恰好一个点,我们可以随便选一段元素进行枚举断环成链,显然最短的一段一定不超过 nk,每次运行分治法 O(nklogn),复杂度 O(nlogWlogn+n2logn)

我们加大力度,注意到路径单调性,我们扩展原本的分治算法,k 个区间一起分治,每次枚举第一个区间的中点,计算出后面每个断点的最优选择(使用分治法),那么我们得到的复杂度是 O(rili)。但是这个算法的复杂度真的是 O(nlogn(logn+logW)) 吗?

由于每次递归会将中点递归往两边,每个分支区间至少要 O(k) 的操作,最多可能有 O(n) 个分治区间,所以上述算法的瓶颈是 O(nk) 的。

解决方案也很容易,把最短的那个区间拿过来当第一个区间,就只会有 O(nk) 个分治区间了。

posted @   juju527  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示