四边形不等式

四边形不等式是一种比较生草常见的优化动态规划的方法


定义

一般的,如果对于任意的 (a1 leq a2 < b1 leq b2)

(m[a1,b1] + m[a2,b2] ≤ m[a1,b2] + m[a2,b1])

那么 (m[i,j]) 满足四边形不等式


优化

(m[i,j]) 表示动态规划的状态量

(m[i,j]) 有类似如下的状态转移方程:

(m[i,j] = min {{ m[i,k] + m[k,j] | i≤k≤j }})

(m) 满足四边形不等式是适用这种优化方法的必要条件

对于一道具体的题目,我们首先要证明它满足这个条件,一般来说用数学归纳法证明,根据题目的不同而不同。

通常的动态规划的复杂度是 (O( n^3 )),我们可以优化到 (O( n^2 ))

定义 (s(i,j)) 为函数 (m(i,j)) 对应的使得 (m(i,j)) 取得最小值的k值。

我们可以证明,(s[i,j-1] ≤ s[i,j] ≤ s[i+1,j])

那么改变状态转移方程为:

(m[i,j] = min {{ m[i,k] + m[k,j] }|s[i,j-1] ≤ k ≤ s[i+1,j]})

复杂度分析:不难看出,复杂度决定于s的值,以求 m[i,i+L] 为例,

(( s[2,L+1] - s[1,L] ) + ( s[3,L+2] - s[2,L+1] )+ …+ ( s[n-L+1,n] - s[n-L,n-1] ) = s[n-L+1,n] - s[1,L] ≤ n)

所以总复杂度是 (O( n ))


证明

(s[i,j-1] ≤ s[i,j] ≤ s[i+1,j]) 的证明:

(mk[i,j] = m[i,k] + m[k,j]) , $ s[i,j] = d$

对于任意 (k < d),有 (mk[i,j] ≥ md[i,j]) ( 这里以 (m[i,j] = min {{ m[i,k] + m[k,j] }}) 为例 , max 的类似) ,

接下来只要证明 (mk[i+1,j] ≥ md[i+1,j])

那么只有当 (s[i+1,j] ≥ s[i,j]) 时才有可能有 (mk[i+1,j] ≥ md[i+1,j])

证明过程:

(( mk[i+1,j] - md[i+1,j] ) - ( mk[i,j] - md[i,j] ))

(= ( mk[i+1,j] + md[i,j] ) - ( md[i+1,j] + mk[i,j] ))

(= ( m[i+1,k] + m[k,j] + m[i,d] + m[d,j] ) - ( m[i+1,d] + m[d,j] + m[i,k] + m[k,j] ))

(=( m[i+1,k] + m[i,d] ) - ( m[i+1,d] + m[i,k] ))

(ecause) (m) 满足四边形不等式

( herefore) 对于 (i < i+1 ≤ k < d)

$ $
(m[i+1,k] + m[i,d] ≥ m[i+1,d] + m[i,k])

( herefore) (( mk[i+1,j] - md[i+1,j] ) ≥ ( mk[i,j] - md[i,j] ) ≥ 0)

( herefore) (s[i,j] ≤ s[i+1,j]) ,同理可证 (s[i,j-1] ≤ s[i,j])

证毕


扩展

以上所给出的状态转移方程只是一种比较一般的,其实,很多状态转移方程都满足四边形不等式优化的条件。

解决这类问题的大概步骤是:

  1. 证明 (w) 满足四边形不等式,这里 (w)(m) 的附属量,形如 (m[i,j] = opt {{ m[i,k] + m[k,j] + w[i,j] }}),此时大多要先证明 (w) 满足条件才能进一步证明 (m) 满足条件
  2. 证明 (m) 满足四边形不等式
  3. 证明 (s[i,j-1] ≤ s[i,j] ≤ s[i+1,j])
原文地址:https://www.cnblogs.com/KnightL/p/14047016.html