0x5B_四边形不等式

0x5B 四边形不等式

w(x,y)w(x, y) 是定义在整数集合上的二元函数。若对于定义域上的任意整数 a,b,c,da, b, c, d ,其中 abcda \leq b \leq c \leq d ,都有 w(a,d)+w(b,c)w(a,c)+w(b,d)w(a, d) + w(b, c) \geq w(a, c) + w(b, d) 成立,则称函数 ww 满足四边形不等式。

定理(四边形不等式的另一种定义)

w(x,y)w(x, y) 是定义在整数集合上的二元函数。若对于定义域上的任意整数 a,ba, b ,其中 a<ba < b ,都有 w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1)w(a, b + 1) + w(a + 1, b) \geq w(a, b) + w(a + 1, b + 1) 成立,则函数 ww 满足四边形不等式。

证明:

对于 a<ca < c ,有 w(a,c+1)+w(a+1,c)w(a,c)+w(a+1,c+1)w(a, c + 1) + w(a + 1, c) \geq w(a, c) + w(a + 1, c + 1)

对于 a+1<ca + 1 < c ,有 w(a+1,c+1)+w(a+2,c)w(a+1,c)+w(a+2,c+1)w(a + 1, c + 1) + w(a + 2, c) \geq w(a + 1, c) + w(a + 2, c + 1)

两式相加,得到 w(a,c+1)+w(a+2,c)w(a,c)+w(a+2,c+1)w(a,c + 1) + w(a + 2,c)\geq w(a,c) + w(a + 2,c + 1)

依此类推,对任意的 abca \leq b \leq c ,有 w(a,c+1)+w(b,c)w(a,c)+w(b,c+1)w(a, c + 1) + w(b, c) \geq w(a, c) + w(b, c + 1)

同理,对任意的 abcda \leq b \leq c \leq d ,有 w(a,d)+w(b,c)w(a,c)+w(b,d)w(a, d) + w(b, c) \geq w(a, c) + w(b, d)

\spadesuit 一维线性DP的四边形不等式优化

对于形如 F[i]=min0j<i{F[j]+val(j,i)}F[i] = \min_{0 \leq j < i} \{F[j] + val(j, i)\} 的状态转移方程,记 p[i]p[i] 为令 F[i]F[i] 取到最小值的 jj 的值,即 p[i]p[i]F[i]F[i] 的最优决策。若 pp[1,N][1, N] 上单调不减(非严格单调递增),则称 FF 具有决策单调性。

定理(决策单调性)

在状态转移方程 F[i]=min0j<i{F[j]+val(j,i)}F[i] = \min_{0 \leq j < i} \{F[j] + val(j, i)\} 中,若函数 valval 满足四边形不等式,则 FF 具有决策单调性。

证明:

i[1,N]\forall i \in [1, N] , j[0,p[i]1]\forall j \in [0, p[i] - 1] , 根据 p[i]p[i] 的最优性, 有:

F[p[i]]+val(p[i],i)F[j]+w(j,i)F [ p [ i ] ] + v a l (p [ i ], i) \leq F [ j ] + w (j, i)

i[i+1,N]\forall i^{\prime}\in [i + 1,N] ,因为val满足四边形不等式,有:

val(j,i)+val(p[i],i)val(j,i)+val(p[i],i)v a l (j, i ^ {\prime}) + v a l (p [ i ], i) \geq v a l (j, i) + v a l (p [ i ], i ^ {\prime})

移项得:

val(p[i],i)val(p[i],i)val(j,i)val(j,i)v a l (p [ i ], i ^ {\prime}) - v a l (p [ i ], i) \leq v a l (j, i ^ {\prime}) - v a l (j, i)

与第一个等式相加,有:

F[p[i]]+val(p[i],i)F[j]+val(j,i)F [ p [ i ] ] + v a l (p [ i ], i ^ {\prime}) \leq F [ j ] + v a l (j, i ^ {\prime})

这个不等式的含义为,以 p[i]p[i] 作为 F[i]F[i'] 的决策,比以 j<p[i]j < p[i] 作为 F[i]F[i'] 的决策更优。换言之, F[i]F[i'] 的最优决策不可能小于 p[i]p[i] ,即 p[i]p[i]p[i'] \geq p[i] 。所以 FF 有决策单调性。

证毕。

FF 有决策单调性时,我们可以把 F[i]=min0j<i{F[j]+val(j,i)}F[i] = \min_{0\leq j < i}\{F[j] + val(j,i)\} 的计算时间从 O(N2)O(N^2) 优化到 O(NlogN)O(N\log N)

考虑对 pp 数组进行维护。最初 pp 数组全部为 0。在 ii 循环进行的任意时刻,根据 p[i]p[i] 的单调性, pp 的情况如下图所示:

pj1<j2<j3<j4<j5p \quad j _ {1} < j _ {2} < j _ {3} < j _ {4} < j _ {5}

当求出一个新的 F[i]F[i] 时,我们应该考虑 ii 可以作为哪些 F[i]F[i'] (i>i)(i' > i) 的最优决策。根据决策单调性,最终我们会找到一个位置,在该位置之前, pp 数组目前存储的决策都比 ii 好,在该位置之后, pp 数组目前存储的决策都比 ii 差。我们要做的就是快速找到上述位置,在 pp 数组中把该位置之后的部分都变为 ii

pj1<j2<j3<ip \quad j _ {1} < j _ {2} < j _ {3} < i

直接修改一个数组效率当然很低。事实上,我们可以建立一个队列,代替 pp 数组。队列中保存若干个三元组 (j,l,r)(j, l, r)jj 表示决策, l,rl, r 表示目前 p[lr]p[l \sim r] 的值都是 jj

例如,第一幅图就可以用5个三元组 (j1,1,2),(j2,3,3),(j3,4,6),(j4,7,8),(j5,9,11)(j_{1},1,2),(j_{2},3,3),(j_{3},4,6),(j_{4},7,8),(j_{5},9,11) 来表示。我们从队尾开始检查,判断出整个 (j4,7,8),(j5,9,11)(j_{4},7,8),(j_{5},9,11) 都不如 ii 优,直接从队尾删除。而 (j3,4,6)(j_{3},4,6) 左端比 ii 优,右端比 ii 差。因此,我们在 (j3,4,6)(j_{3},4,6) 里二分查找,

即可确定所求的位置。最后我们把 (j3,4,6)(j_{3},4,6) 变为 (j3,4,5)(j_{3},4,5) ,把 (i,6,11)(i,6,11) 入队,即可得到上页第二幅图所示的情景。

另外,队列中没有必要保存小于 p[1i1]p[1 \sim i - 1] 的部分,我们可以通过检查队头来排除掉过时的决策。这样就可以像许多单调队列问题一样,直接取队头为最优决策了。

总而言之,对于每个 i[1,N]i \in [1, N] ,我们执行以下操作:

  1. 检查队头:设队头为 (j0,l0,r0)(j_0, l_0, r_0) ,若 r0=i1r_0 = i - 1 ,删除队头。否则令 l0=il_0 = i

  2. 取队头保存的 jj 为最优决策,执行状态转移,计算出 F[i]F[i]
    3.尝试插入新决策 ii ,步骤如下:

(1)取出队尾,记为 (jt,lt,rt)(j_{t},l_{t},r_{t})
(2) 若对于 F[lt]F[l_{t}] 来说, ii 是比 jtj_{t} 更优的决策,即 F[i]+val(i,lt)F[jt]+val(jt,lt)F[i] + \text{val}(i, l_{t}) \leq F[j_{t}] + \text{val}(j_{t}, l_{t}) ,记 pos=ltpos = l_{t} ,删除队尾,回到步骤(1)。
(3) 若对于 F[rt]F[r_{t}] 来说, jtj_{t} 是比 ii 更优的决策,即 F[jt]+val(jt,rt)F[i]+val(i,rt)F[j_{t}] + \text{val}(j_{t}, r_{t}) \leq F[i] + \text{val}(i, r_{t}) ,去往步骤(5)。
(4) 否则,在 [lt,rt][l_t, r_t] 上二分查找,求出位置 pospos ,在此之前决策 jtj_t 更优,在此之后决策 ii 更优,去往步骤(5)。
(5) 把三元组 (i,pos,N)(i, pos, N) 插入队尾。

请读者结合以下例题尝试实现上述过程。

*【例题】诗人小 G NOI2009/BZOJ1563

小G是一个出色的诗人,经常作诗自娱自乐。但是,他一直被一件事情所困扰,那就是诗的排版问题。

一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的。小G给每首诗定义了一个行标准长度(行的长度为一行中符号的总个数),他希望排版后每行的长度都和行标准长度相差不远。显然排版时,不应改变原有的句子顺序,并且小G不允许把一个句子分在两行或者更多的行内。在满足上面两个条件的情况下,小G对于排版中的每行定义了一个不协调度,为这行的实际长度与行标准长度差值绝对值的 PP 次方,而一个排版的不协调度为所有行不协调度的总和。

小G最近又作了几首诗,现在请你对这几首诗进行排版,使得排版后的诗尽量协调(即不协调度尽量小),并把排版的结果告诉他。

诗中的句子数 NN 不超过 10510^{5} , 每句的字符数不超过 30, 行标准长度 LL 不超过 31063 * 10^{6} , PP 不超过 10。

F[i]F[i] 表示对前 ii 句诗排版的最小不协调度,记 a[i]a[i] 为第 ii 句诗的长度,

sum[i] 为前 ii 句诗的总长度。

F[i]=min0j<i{F[j]+(sum[i]sum[j])+(ij1)LP}F [ i ] = \min _ {0 \leq j < i} \left\{F [ j ] + \left| (s u m [ i ] - s u m [ j ]) + (i - j - 1) - L \right| ^ {P} \right\}

这里 val(j,i)=(sum[i]sum[j])+(ij1)LPval(j,i) = |(sum[i] - sum[j]) + (i - j - 1) - L|^P ,存在大量 i,ji,j 的高次乘积项,不适合用单调队列或斜率优化。于是,我们尝试判断 val(j,i)val(j,i) 是否满足四边形不等式。

要证明对于任意 j<ij < ival(j,i+1)+val(j+1,i)val(j,i)+val(j+1,i+1)\operatorname{val}(j,i + 1) + \operatorname{val}(j + 1,i)\geq \operatorname{val}(j,i) + \operatorname{val}(j + 1,i + 1) 只需证明 val(j+1,i)val(j+1,i+1)val(j,i)val(j,i+1)\operatorname{val}(j + 1,i) - \operatorname{val}(j + 1,i + 1)\geq \operatorname{val}(j,i) - \operatorname{val}(j,i + 1)

u=(sum[i]+i)(sum[j]+j)(L+1)u = (sum[i] + i) - (sum[j] + j) - (L + 1)

v=(sum[i]+i)(sum[j+1]+j+1)(L+1)v = (sum[i] + i) - (sum[j + 1] + j + 1) - (L + 1)

只需证明 vpv+(a[i+1]+1)pupu+(a[i+1]+1)p|v|^p - |v + (a[i + 1] + 1)|^p \geq |u|^p - |u + (a[i + 1] + 1)|^p

显然 u>vu > v 。故只需证明对任意常数 cc ,函数 y=xPx+cPy = |x|^P - |x + c|^P 单调递减。

PP 为奇数且 x[c,0]x \in [-c,0] 时,函数写作 y=xP(x+c)Py = -x^{P} - (x + c)^{P} 。对 xx 求导,得到 y=PxP1P(x+c)P1y' = -P * x^{P-1} - P * (x + c)^{P-1} ,因为 P1P-1 是偶数, PP 是正整数,所以 y0y' \leq 0 。从而 yy 关于 xx 单调递减。对于 PP 为偶数、 x[,c]x \in [-\infty, -c]x[0,+]x \in [0, +\infty] 的情况,利用导数,同理可证。

综上所述, val(j,i)val(j, i) 满足四边形不等式。因此, FF 满足决策单调性。按照我们之前讲解的方法,用队列维护决策三元组,即可在 O(NlogN)O(N \log N) 的时间内解决本题。

\spadesuit 二维区间DP的四边形不等式优化

在区间DP问题,例如“石子合并”一题中,我们经常遇到下面这样的状态转移方程:

F[i,j]=minik<j{F[i,k]+F[k+1,j]+w(i,j)}F [ i, j ] = \min _ {i \leq k < j} \{F [ i, k ] + F [ k + 1, j ] + w (i, j) \}

利用四边形不等式,也可以对该方程的状态转移进行优化。

定理

在状态转移方程 F[i,j]=minik<j{F[i,k]+F[k+1,j]+w(i,j)}F[i,j] = \min_{i\leq k < j}\{F[i,k] + F[k + 1,j] + w(i,j)\} 中(特别地, F[i,i]=w(i,i)=0F[i,i] = w(i,i) = 0 ,如果下面两个条件成立:

  1. ww 满足四边形不等式。

  2. 对于任意的 abcda \leq b \leq c \leq d ,有 w(a,d)w(b,c)w(a, d) \geq w(b, c)

那么 FF 也满足四边形不等式。

证明:

i+1=ji + 1 = j 时, F[i,j+1]+F[i+1,j]=F[i,i+2]+F[i+1,i+1]=F[i,i+2]F[i,j + 1] + F[i + 1,j] = F[i,i + 2] + F[i + 1,i + 1] = F[i,i + 2]

F[i,i+2]F[i,i + 2] 的最优决策是 i+1i + 1 ,则 F[i,i+2]=F[i,i+1]+F[i+1,i+2]+w(i,i+2)F[i,i+1]+F[i+1,i+2]=F[i,j]+F[i+1,j+1]F[i,i + 2] = F[i,i + 1] + F[i + 1,i + 2] + w(i,i + 2)\geq F[i,i + 1] + F[i + 1,i + 2] = F[i,j] + F[i + 1,j + 1]

F[i,i+2]F[i,i + 2] 的最优决策是 ii ,则 F[i,i+2]=F[i,i]+F[i+1,i+2]+w(i,i+2)=w(i+1,i+2)+w(i,i+2)w(i+1,i+2)+w(i,i+1)=F[i+1,i+2]+F[i,i+1].F[i,i + 2] = F[i,i] + F[i + 1,i + 2] + w(i,i + 2) = w(i + 1,i + 2) + w(i,i + 2)\geq w(i + 1,i + 2) + w(i,i + 1) = F[i + 1,i + 2] + F[i,i + 1].

故当 ji=1j - i = 1 时,四边形不等式对 F(i,j)F(i,j) 成立。

接下来,用数学归纳法,假设当 ji<kj - i < k 时,四边形不等式对 F(i,j)F(i,j) 成立。考虑 ji=kj - i = k 的情况。设 F[i,j+1]F[i,j + 1]xx 为最优决策, F[i+1,j]F[i + 1,j]yy 为最优决策。不妨设 i+1xyi + 1 \leq x \leq y

根据 xxyy 的最优性,有:

F[i,j+1]+F[i+1,j]=F[i,x]+F[x+1,j+1]+w(i,j+1)+F[i+1,y]+F[y+1,j]+w(i+1,j)(①)\begin{array}{l} F [ i, j + 1 ] + F [ i + 1, j ] = F [ i, x ] + F [ x + 1, j + 1 ] + w (i, j + 1) \\ + F [ i + 1, y ] + F [ y + 1, j ] + w (i + 1, j) \tag {①} \\ \end{array}

对于 F[i,j]F[i,j]F[i+1,j+1]F[i + 1,j + 1]xxyy 是任意决策(不一定最优),故:

F[i,j]+F[i+1,j+1]F[i,x]+F[x+1,j]+w(i,j)+F[i+1,y]+F[y+1,j+1]+w(i+1,j+1)\begin{array}{l} F [ i, j ] + F [ i + 1, j + 1 ] \leq F [ i, x ] + F [ x + 1, j ] + w (i, j) \\ + F [ i + 1, y ] + F [ y + 1, j + 1 ] + w (i + 1, j + 1) \quad ② \\ \end{array}

因为 ww 满足四边形不等式,所以:

w(i,j+1)+w(i+1,j)w(i,j)+w(i+1,j+1)w (i, j + 1) + w (i + 1, j) \geq w (i, j) + w (i + 1, j + 1)

根据归纳假设,有:

F[x+1,j+1]+F[y+1,j]F[x+1,j]+F[y+1,j+1]F [ x + 1, j + 1 ] + F [ y + 1, j ] \geq F [ x + 1, j ] + F [ y + 1, j + 1 ]

结合这两个不等式,比较①②两式,得到:

F[i,j+1]+F[i+1,j]F[i,j]+F[i+1,j+1]F [ i, j + 1 ] + F [ i + 1, j ] \geq F [ i, j ] + F [ i + 1, j + 1 ]

证毕。

定理(二维决策单调性)

在状态转移方程 F[i,j]=minik<j{F[i,k]+F[k+1,j]+w(i,j)}F[i,j] = \min_{i\leq k < j}\{F[i,k] + F[k + 1,j] + w(i,j)\} 中(特别地, F[i,i]=w(i,i)=0F[i,i] = w(i,i) = 0 ),记 P[i,j]P[i,j] 为令 F[i,j]F[i,j] 取到最小值的 kk 值。

如果 FF 满足四边形不等式,那么对于任意 i<ji < j ,有 P[i,j1]P[i,j]P[i+1,j]P[i,j - 1] \leq P[i,j] \leq P[i + 1,j]

证明:

为方便起见,记 p=P[i,j]p = P[i,j] ,对于任意的 i<kpi < k\leq p ,因为 FF 满足四边形不等式:

F[i,p]+F[i+1,k]F[i,k]+F[i+1,p]F [ i, p ] + F [ i + 1, k ] \geq F [ i, k ] + F [ i + 1, p ]

移项可得:

F[i+1,k]F[i+1,p]F[i,k]F[i,p]F [ i + 1, k ] - F [ i + 1, p ] \geq F [ i, k ] - F [ i, p ]

根据 pp 的最优性,有:

F[i,k]+F[k+1,j]F[i,p]+F[p+1,j]F [ i, k ] + F [ k + 1, j ] \geq F [ i, p ] + F [ p + 1, j ]

因此:

(F[i+1,k]+F[k+1,j]+w(i+1,j))(F[i+1,p]+F[p+1,j]+w(i+1,j))=(F[i+1,k]F[i+1,p])+(F[k+1,j]F[p+1,j])(F[i,k]F[i,p])+(F[k+1,j]F[p+1,j])=(F[i,k]+F[k+1,j])(F[i,p]+F[p+1,j])0\begin{array}{l} \left(F [ i + 1, k ] + F [ k + 1, j ] + w (i + 1, j)\right) - \left(F [ i + 1, p ] + F [ p + 1, j ] + w (i + 1, j)\right) \\ = (F [ i + 1, k ] - F [ i + 1, p ]) + (F [ k + 1, j ] - F [ p + 1, j ]) \\ \geq \left(F [ i, k ] - F [ i, p ]\right) + \left(F [ k + 1, j ] - F [ p + 1, j ]\right) \\ = (F [ i, k ] + F [ k + 1, j ]) - (F [ i, p ] + F [ p + 1, j ]) \\ \geq 0 \\ \end{array}

这意味着对于 F[i+1,j]F[i + 1,j]P\mathcal{P} 比任意的 kpk\leq p 更优。因此 P[i+1,j]P[i,j]P[i + 1,j]\geq P[i,j]

类似地,同理可证 P[i,j1]P[i,j]P[i,j - 1]\leq P[i,j]

证毕。

【例题】再探石子合并

题意与 0×530 \times 53 节的“石子合并”相同,数据范围 N5000N \leq 5000

石子合并问题的DP状态转移方程为:

F[l,r]=minlk<r{F[l,k]+F[k+1,r]}+i=lrAiF [ l, r ] = \min _ {l \leq k < r} \left\{F [ l, k ] + F [ k + 1, r ] \right\} + \sum_ {i = l} ^ {r} A _ {i}

i=lrAi\sum_{i = l}^{r}A_{i} 是区间和,显然满足四边形不等式,且取到等号。

根据上面两条定理,我们只需要在 P[l,r1]kP[l+1,r]P[l,r - 1]\leq k\leq P[l + 1,r] 的范围内对 k\pmb{k} 进行枚举,求出 F[l,r]F[l,r]P[l,r]P[l,r] 。算法的时间复杂度为: O(l=1N1r=l+1N(P[l+1,r]\mathrm{O}\bigl (\sum_{l = 1}^{N - 1}\sum_{r = l + 1}^{N}(P[l + 1,r] - P[l,r1]+1))=O(l=1N1(P[l+1,N]P[1,Nl]+Nl))=O(N2)P[l,r - 1] + 1)\big) = O\bigl (\sum_{l = 1}^{N - 1}(P[l + 1,N] - P[1,N - l] + N - l)\bigr) = O(N^2)\circ

事实上,石子合并问题还有 O(NlogN)O(N \log N) 复杂度的非动态规划算法,感兴趣的读者可以自行查阅相关资料,并完成题目 POJ1738。

到此为止,我们对动态规划优化策略的探讨就告一段落。请读者再次回顾 0×560×580 \times 56 \sim 0 \times 58 节的各个模型和例题,理解每一种优化的本质,尝试作出一份总结,做到对何种情况下适合使用何种优化方法有初步的认识。

0x5B_四边形不等式 - 算法竞赛进阶指南 | OpenTech