*下文中“优于”一般指的是“不劣于”,请自行分辨。
四边形不等式
四边形不等式定义为:
位于整数集合上的二元函数
f
(
x
,
y
)
f(x,y)
f(x,y),对于
a
≤
b
≤
c
≤
d
a\leq b\leq c\leq d
a≤b≤c≤d,若满足:
f
(
a
,
c
)
+
f
(
b
,
d
)
≤
f
(
a
,
d
)
+
f
(
b
,
c
)
f(a,c)+f(b,d)\leq f(a,d)+f(b,c)
f(a,c)+f(b,d)≤f(a,d)+f(b,c),即相交和小于包含和,则称函数
f
f
f满足四边形不等式。
函数 f f f若满足 f ( a , c ) + f ( b , d ) ≤ f ( a , d ) + f ( b , c ) f(a,c)+f(b,d)\leq f(a,d)+f(b,c) f(a,c)+f(b,d)≤f(a,d)+f(b,c),即相交和大于包含和,则亦称函数 f f f满足四边形不等式。
在动态规划问题中,四边形不等式指的是相交优于包含(可能是大于,也可能是小于),因为相交优于包含能够推出决策单调性。接下来讨论相交小于包含。
四边形不等式具有两种等价的定义:
- a ≤ b ≤ c ≤ d : f ( a , c ) + f ( b , d ) ≤ f ( a , d ) + f ( b , c ) a\leq b\leq c\leq d:f(a,c)+f(b,d)\leq f(a,d)+f(b,c) a≤b≤c≤d:f(a,c)+f(b,d)≤f(a,d)+f(b,c)
- f ( i , j ) + f ( i + 1 , j + 1 ) ≤ f ( i , j + 1 ) + f ( i + 1 , j ) f(i,j)+f(i+1,j+1)\leq f(i,j+1)+f(i+1,j) f(i,j)+f(i+1,j+1)≤f(i,j+1)+f(i+1,j)
下面是证明。
还原不等式
接下来展示一种用来推式子的方法。主要思想就是根据条件列出一个不等式,然后把结论写成另一个不等式。通过对比发现从条件到结论差了什么,然后把差的那部分还原出来。
我们证明一下从2推出1,记 f ( x , y ) = f x , y f(x,y)=f_{x,y} f(x,y)=fx,y:
首先我们归纳,假设对于所有的长度小于 j − i + 2 j-i+2 j−i+2的区间都满足“从2可以推出1”的结论:
我们已知 f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j ① f_{i,j}+f_{i+1,j+1}\leq f_{i,j+1}+f_{i+1,j}\;① fi,j+fi+1,j+1≤fi,j+1+fi+1,j①
要证明
f
i
,
c
+
f
b
,
j
+
1
≤
f
i
,
j
+
1
+
f
b
,
c
(
i
≤
b
≤
c
≤
j
+
1
)
f_{i,c}+f_{b,j+1}\leq f_{i,j+1}+f_{b,c}(i\leq b\leq c\leq j+1)
fi,c+fb,j+1≤fi,j+1+fb,c(i≤b≤c≤j+1)
现在我们设法让式子中的
i
+
1
i+1
i+1变为
i
+
2
i+2
i+2:
f
i
,
j
+
f
i
+
2
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
2
,
j
②
f_{i,j}+f_{i+2,j+1}\leq f_{i,j+1}+f_{i+2,j}\;②
fi,j+fi+2,j+1≤fi,j+1+fi+2,j②
然后我们对比一下条件①和要证明的式子②:
①
:
f
i
,
j
+
f
i
+
1
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
①:f_{i,j}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}}
①:fi,j+fi+1,j+1≤fi,j+1+fi+1,j
②
:
f
i
,
j
+
f
i
+
2
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
2
,
j
②:f_{i,j}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}}
②:fi,j+fi+2,j+1≤fi,j+1+fi+2,j
两式有一些项是相同的,有一些项是不同的,不同的项用颜色标出来了。我们假设有一个不等式
T
T
T,使得
①
+
T
=
②
①+T=②
①+T=②,现在我们试图还原出
T
T
T来:
①
:
f
i
,
j
+
f
i
+
1
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
①:f_{i,j}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}}
①:fi,j+fi+1,j+1≤fi,j+1+fi+1,j
T
:
?
≤
?
T\;:\hspace{2cm}?\leq \;?
T:?≤?
②
:
f
i
,
j
+
f
i
+
2
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
2
,
j
②:f_{i,j}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}}
②:fi,j+fi+2,j+1≤fi,j+1+fi+2,j
可以看到相同的项同时在①、②式中出现,因此在
T
T
T中不需要管他们。
蓝色的项在②式中出现,而在①式中没有,因此应该在
T
T
T中被加上去,所以我们把蓝色的项写到
T
T
T不等号的对应侧:
①
:
f
i
,
j
+
f
i
+
1
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
①:f_{i,j}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}}
①:fi,j+fi+1,j+1≤fi,j+1+fi+1,j
T
:
?
+
f
i
+
2
,
j
+
1
≤
?
+
f
i
+
2
,
j
T\;:\hspace{0.45cm}?+\textcolor{blue}{f_{i+2,j+1}}\leq \hspace{0.725cm}?+\textcolor{blue}{f_{i+2,j}}
T:?+fi+2,j+1≤?+fi+2,j
②
:
f
i
,
j
+
f
i
+
2
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
2
,
j
②:f_{i,j}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}}
②:fi,j+fi+2,j+1≤fi,j+1+fi+2,j
可以看到红色的项原来在①中出现了,但是在②中消失了,这说明它们在 T T T中被减去了一次,也就是说带有负一的系数:
①
:
f
i
,
j
+
f
i
+
1
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
①:f_{i,j}\hspace{0.895cm}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}}
①:fi,j+fi+1,j+1≤fi,j+1+fi+1,j
T
:
−
f
i
+
1
,
j
+
1
+
f
i
+
2
,
j
+
1
≤
−
f
i
+
1
,
j
+
f
i
+
2
,
j
T\;:\textcolor{red}{-f_{i+1,j+1}}+\textcolor{blue}{f_{i+2,j+1}}\leq \textcolor{red}{-f_{i+1,j}}+\textcolor{blue}{f_{i+2,j}}
T:−fi+1,j+1+fi+2,j+1≤−fi+1,j+fi+2,j
②
:
f
i
,
j
+
f
i
+
2
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
2
,
j
②:f_{i,j}\hspace{0.895cm}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}}
②:fi,j+fi+2,j+1≤fi,j+1+fi+2,j
整理一下
T
T
T:
T
:
f
i
+
2
,
j
+
1
+
f
i
+
1
,
j
≤
f
i
+
2
,
j
+
f
i
+
1
,
j
+
1
T:f_{i+2,j+1}+f_{i+1,j}\leq f_{i+2,j}+f_{i+1,j+1}
T:fi+2,j+1+fi+1,j≤fi+2,j+fi+1,j+1
这恰好就是区间长度为 j − i + 1 j-i+1 j−i+1的四边形不等式,因此 ① + T = ② ①+T=② ①+T=②,则②式得证。
至此,我们已经可以仿照刚才的证明,将四边形不等式内部的两个端点向内移动1的长度任意次,因此我们已经证明了 f i , c + f b , j + 1 ≤ f i , j + 1 + f b , c ( i ≤ b ≤ c ≤ j + 1 ) f_{i,c}+f_{b,j+1}\leq f_{i,j+1}+f_{b,c}(i\leq b\leq c\leq j+1) fi,c+fb,j+1≤fi,j+1+fb,c(i≤b≤c≤j+1)
QED.
石子合并
这篇文章只涉及简单四边形不等式优化dp,因此最优决策点都是枚举的。
石子合并求最小值
设 a i a_i ai表示第 i i i堆石子的大小。
首先破环为链,然后区间dp:
设状态函数 f i , j f_{i,j} fi,j为区间 [ i , j ] [i,j] [i,j]对应的石子合并成一堆的最小贡献, s s s表示石子的前缀和。
则: f i , j = min k = i j { f i , k + f k + 1 , j } + s j − s i − 1 f_{i,j}=\overset{j}{\underset{k=i}{\min}}\left\{f_{i,k}+f_{k+1,j}\right\}+s_j-s_{i-1} fi,j=k=iminj{fi,k+fk+1,j}+sj−si−1
这里其实 k k k应该枚举到 j − 1 j-1 j−1就停止的,那我们拓展一下状态,令 f x + 1 , x = − ∞ f_{x+1,x}=-\infty fx+1,x=−∞
暴力区间dp是 O ( n 3 ) O(n^3) O(n3)的:
for(int len=2;len<=n;len++){ 区间长度
for(int i=1,j;(j=i+len-1)<=2*n;i++){ 区间端点
for(int k=i;k<j;k++){ 区间分割点
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);
}
}
}
可以优化到 O ( n 2 ) O(n^2) O(n2):
for(int len=2; len<=n; len++){ 区间长度
for(int i=1,j; (j=i+len-1)<=2*n; i++){ 区间端点
for(int k=p[i][j-1]; k<=p[i+1][j]; k++){ 区间分割点
if(f[i][j]>f[i][k]+f[k+1][j]+s[j]-s[i-1]) 决策单调性优化dp
f[i][j]=f[i][k]+f[k+1][j]+s[j]-s[i-1], p[i][j]=k;
}
}
}
大概的意思是说设 p i , j p_{i,j} pi,j表示 f i , j f_{i,j} fi,j的最优决策点,则 p i , j − 1 ≤ p i , j ≤ p i + 1 , j p_{i,j-1}\leq p_{i,j}\leq p_{i+1,j} pi,j−1≤pi,j≤pi+1,j,我们通过把枚举决策点的区间缩小,减小了复杂度。
接下来用四步我们来看看这个过程:
- 证明贡献函数 w i , j w_{i,j} wi,j满足四边形不等式
- 证明状态函数 f i , j f_{i,j} fi,j满足四边形不等式
- 证明决策单调性。
- 证明时间复杂度 O ( n 2 ) O(n^2) O(n2)
1.证明贡献函数满足四边形不等式
四边形不等式
对于: f i , j = min k = i j { f i , k + f k + 1 , j } + s j − s i − 1 f_{i,j}=\overset{j}{\underset{k=i}{\min}}\left\{f_{i,k}+f_{k+1,j}\right\}+s_j-s_{i-1} fi,j=k=iminj{fi,k+fk+1,j}+sj−si−1
我们定义贡献函数
w
i
,
j
=
s
j
−
s
i
−
1
(
w
i
,
i
除外
)
w_{i,j}=s_j-s_{i-1}(w_{i,i}除外)
wi,j=sj−si−1(wi,i除外),也就是说:
f
i
,
j
=
min
k
=
i
j
{
f
i
,
k
+
f
k
+
1
,
j
}
+
w
i
,
j
f_{i,j}=\overset{j}{\underset{k=i}{\min}}\left\{f_{i,k}+f_{k+1,j}\right\}+w_{i,j}
fi,j=k=iminj{fi,k+fk+1,j}+wi,j
其中 f i , i = 0 , w i , i = 0 f_{i,i}=0,w_{i,i}=0 fi,i=0,wi,i=0
接下来证明
w
w
w满足四边形不等式:
w
i
,
j
+
w
i
+
1
,
j
+
1
≤
w
i
,
j
+
1
+
w
i
+
1
,
j
w_{i,j}+w_{i+1,j+1}\leq w_{i,j+1}+w_{i+1,j}
wi,j+wi+1,j+1≤wi,j+1+wi+1,j
即:
s
j
−
s
i
−
1
+
s
j
+
1
−
s
i
≤
s
j
+
1
−
s
i
−
1
+
s
j
−
s
i
s_j-s_{i-1}+s_{j+1}-s_i\leq s_{j+1}-s_{i-1}+s_j-s_i
sj−si−1+sj+1−si≤sj+1−si−1+sj−si
左右两边直接相等了,所以肯定满足四边形不等式…
区间包含单调性
事实上,显然贡献函数还满足区间包含单调性:
w
x
,
y
≤
w
i
,
j
(
[
x
,
y
]
⊆
[
i
,
j
]
)
w_{x,y}\leq w_{i,j} ([x,y]\subseteq[i,j])
wx,y≤wi,j([x,y]⊆[i,j])
贡献数量
设 f i , j = ∑ k = 1 j − i w x k , y k f_{i,j}=\overset{j-i}{\underset{k=1}\sum}w_{x_k,y_k} fi,j=k=1∑j−iwxk,yk,则满足 [ x k , y k ] ⊆ [ i , j ] [x_k,y_k]\subseteq[i,j] [xk,yk]⊆[i,j]
证明:
初始状态中,区间
[
i
,
j
]
[i,j]
[i,j]中有
j
−
i
+
1
j-i+1
j−i+1堆石子,每进行一次操作就会减少一堆石子,同时给
f
i
,
j
f_{i,j}
fi,j增加一个
w
x
,
y
w_{x,y}
wx,y,其中
[
x
,
y
]
⊆
[
i
,
j
]
[x,y]\subseteq[i,j]
[x,y]⊆[i,j],总共最后合并到只有一堆石子,总共合并了
j
−
i
j-i
j−i次,因此状态函数贡献了
j
−
i
j-i
j−i个,证毕。
上界
f i , j ≤ ( j − i ) ⋅ w i , j f_{i,j}\leq (j-i)\cdot w_{i,j} fi,j≤(j−i)⋅wi,j
证明:
因为:
w
x
k
,
y
k
≤
w
i
,
j
w_{x_k,y_k}\leq w_{i,j}
wxk,yk≤wi,j
所以:
f
i
,
j
=
∑
k
=
1
j
−
i
w
x
k
,
y
k
≤
(
j
−
i
)
⋅
w
i
,
j
f_{i,j}=\overset{j-i}{\underset{k=1}\sum}w_{x_k,y_k}\leq (j-i)\cdot w_{i,j}
fi,j=k=1∑j−iwxk,yk≤(j−i)⋅wi,j
2.证明状态函数满足四边形不等式
证明 f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j f_{i,j}+f_{i+1,j+1}\leq f_{i,j+1}+f_{i+1,j} fi,j+fi+1,j+1≤fi,j+1+fi+1,j:
首先归纳一下,假设对于所有区间长度小于 j − i + 2 j-i+2 j−i+2的区间都满足状态函数上的四边形不等式。
然后我们设
f
i
,
j
+
1
f_{i,j+1}
fi,j+1的最优决策点为
x
x
x。
f
i
,
j
+
1
=
f
i
,
x
+
f
x
+
1
,
j
+
1
+
w
i
,
j
+
1
\textcolor{blue}{f_{i,j+1}}=f_{i,x}+f_{x+1,j+1}+w_{i,j+1}
fi,j+1=fi,x+fx+1,j+1+wi,j+1
我们知道
f
i
,
j
f_{i,j}
fi,j的最优决策点不一定为
x
x
x,因此有不等式:
f
i
,
j
≤
f
i
,
x
+
f
x
+
1
,
j
+
w
i
,
j
\textcolor{red}{f_{i,j}}\leq f_{i,x}+f_{x+1,j}+w_{i,j}
fi,j≤fi,x+fx+1,j+wi,j
同理,我们设
f
i
+
1
,
j
f_{i+1,j}
fi+1,j为
y
y
y,则:
f
i
+
1
,
j
=
f
i
+
1
,
y
+
f
y
+
1
,
j
+
w
i
+
1
,
j
\textcolor{blue}{f_{i+1,j}}=f_{i+1,y}+f_{y+1,j}+w_{i+1,j}
fi+1,j=fi+1,y+fy+1,j+wi+1,j
考虑
f
i
+
1
,
j
+
1
f_{i+1,j+1}
fi+1,j+1的最优决策点不一定为
y
y
y,就得到:
f
i
+
1
,
j
+
1
≤
f
i
+
1
,
y
+
f
y
+
1
,
j
+
1
+
w
i
+
1
,
j
+
1
\textcolor{red}{f_{i+1,j+1}}\leq f_{i+1,y}+f_{y+1,j+1}+w_{i+1,j+1}
fi+1,j+1≤fi+1,y+fy+1,j+1+wi+1,j+1
为了凑出
f
i
,
j
+
f
i
+
1
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
{\color{red}f_{i,j}+f_{i+1,j+1}}\leq \color{blue}f_{i,j+1}+f_{i+1,j}
fi,j+fi+1,j+1≤fi,j+1+fi+1,j,我们需要把刚才的四个式子加起来(注意等式相加的方向):
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
+
w
i
,
j
+
1
+
w
i
+
1
,
j
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
+
f
x
+
1
,
j
+
f
y
+
1
,
j
+
1
+
w
i
,
j
+
w
i
+
1
,
j
+
1
\textcolor{red}{f_{i,j}+f_{i+1,j+1}}+f_{x+1,j+1}+f_{y+1,j}+w_{i,j+1}+w_{i+1,j}\leq \textcolor{blue}{f_{i,j+1}+f_{i+1,j}}+f_{x+1,j}+f_{y+1,j+1}+w_{i,j}+w_{i+1,j+1}
fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+1+wi+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1
因此现在距离要证明的结论已经相当接近了,要想办法约掉剩余的几项。
先看到贡献函数
w
w
w:
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
+
w
i
,
j
+
1
+
w
i
+
1
,
j
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
+
f
x
+
1
,
j
+
f
y
+
1
,
j
+
1
+
w
i
,
j
+
w
i
+
1
,
j
+
1
f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{red}{w_{i,j+1}+w_{i+1,j}}\leq f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}+\textcolor{green}{w_{i,j}+w_{i+1,j+1}}
fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+1+wi+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1
可以对左边用四边形不等式
w
i
,
j
+
w
i
+
1
,
j
+
1
≤
w
i
,
j
+
1
+
w
i
+
1
,
j
\textcolor{blue}{w_{i,j}+w_{i+1,j+1}}\leq \textcolor{red}{w_{i,j+1}+w_{i+1,j}}
wi,j+wi+1,j+1≤wi,j+1+wi+1,j(也可以对右边用):
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
+
w
i
,
j
+
w
i
+
1
,
j
+
1
≤
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
+
w
i
,
j
+
1
+
w
i
+
1
,
j
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
+
f
x
+
1
,
j
+
f
y
+
1
,
j
+
1
+
w
i
,
j
+
w
i
+
1
,
j
+
1
f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{blue}{w_{i,j}+w_{i+1,j+1}}\leq f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{red}{w_{i,j+1}+w_{i+1,j}}\leq\\ f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}+\textcolor{green}{w_{i,j}+w_{i+1,j+1}}
fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+wi+1,j+1≤fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+1+wi+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1
然后我们研究左右那两项:
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
+
w
i
,
j
+
w
i
+
1
,
j
+
1
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
+
f
x
+
1
,
j
+
f
y
+
1
,
j
+
1
+
w
i
,
j
+
w
i
+
1
,
j
+
1
f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{blue}{w_{i,j}+w_{i+1,j+1}}\leq f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}+\textcolor{green}{w_{i,j}+w_{i+1,j+1}}
fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+wi+1,j+1≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1
就把贡献函数约掉了:
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
+
f
x
+
1
,
j
+
f
y
+
1
,
j
+
1
f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}\leq f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}
fi,j+fi+1,j+1+fx+1,j+1+fy+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1
现在我们来研究多余的那四项状态函数:
f
i
,
j
+
f
i
+
1
,
j
+
1
+
f
x
+
1
,
j
+
1
+
f
y
+
1
,
j
≤
f
i
,
j
+
1
+
f
i
+
1
,
j
+
f
x
+
1
,
j
+
f
y
+
1
,
j
+
1
f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}}
fi,j+fi+1,j+1+fx+1,j+1+fy+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1
-
若 x ≤ y x\leq y x≤y,则红色两项不交,蓝色的两项则是包含关系,就会有 f x + 1 , j + f y + 1 , j + 1 ≤ f x + 1 , j + 1 + f y + 1 , j \color{blue} f_{x+1,j}+f_{y+1,j+1}\leq f_{x+1,j+1}+f_{y+1,j} fx+1,j+fy+1,j+1≤fx+1,j+1+fy+1,j,因此就会有:
f i , j + f i + 1 , j + 1 + f x + 1 , j + f y + 1 , j + 1 ≤ f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j}+f_{y+1,j+1}}\leq f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}} fi,j+fi+1,j+1+fx+1,j+fy+1,j+1≤fi,j+fi+1,j+1+fx+1,j+1+fy+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1
去掉中间那个式子: f i , j + f i + 1 , j + 1 + f x , j + f y + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x,j}+f_{y+1,j+1}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}} fi,j+fi+1,j+1+fx,j+fy+1,j+1≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1 -
若 x > y x>y x>y,则蓝色两项不交,红色两项则是相交关系,就会有 f x + 1 , j + f y + 1 , j + 1 ≤ f x + 1 , j + 1 + f y + 1 , j \color{red}f_{x+1,j}+f_{y+1,j+1}\leq f_{x+1,j+1}+f_{y+1,j} fx+1,j+fy+1,j+1≤fx+1,j+1+fy+1,j,因此就会有:
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + 1 + f y + 1 , j f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j+1}+f_{y+1,j}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,j≤fi,j+1+fi+1,j+fx+1,j+fy+1,j+1≤fi,j+1+fi+1,j+fx+1,j+1+fy+1,j
去掉中间那个式子:
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + 1 + f y + 1 , j f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j+1}+f_{y+1,j}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,j≤fi,j+1+fi+1,j+fx+1,j+1+fy+1,j
可以看出无论那种情况,红蓝两项都抵消了,因此得证。
(一些什么边界情况就不考虑的了,反正显然)
后记:
- 至于是把 x , y x,y x,y是应该带入 f i , j , f i + 1 , j + 1 f_{i,j},f_{i+1,j+1} fi,j,fi+1,j+1还是应该带入 f i + 1 , j + 1 , f i , j f_{i+1,j+1},f_{i,j} fi+1,j+1,fi,j,没有区别,很明显这两种情况是对称的。
- 至于如果有人问如果 x , y x,y x,y不表示 f i , j + 1 , f i + 1 , j f_{i,j+1},f_{i+1,j} fi,j+1,fi+1,j的最优决策点,表示 f i , j , f i + 1 , j + 1 f_{i,j},f_{i+1,j+1} fi,j,fi+1,j+1的最优决策点行不行,答案是不行,因为不等号方向反了。
- 感觉这种推导还是应该从条件和结论的联系上找线索。还是双向奔赴会比较容易…其实这种证明过程一般情况下结论比条件好确定…
3.证明决策单调性
设 p i , j p_{i,j} pi,j表示 f i , j f_{i,j} fi,j的其中一个最优决策点。
决策单调性指的是, ∀ p i , j − 1 , p i + 1 , j : ∃ p i , j 满足 p i , j − 1 ≤ p i , j ≤ p i + 1 , j \forall p_{i,j-1},p_{i+1,j}:\exists p_{i,j}满足 p_{i,j-1}\leq p_{i,j}\leq p_{i+1,j} ∀pi,j−1,pi+1,j:∃pi,j满足pi,j−1≤pi,j≤pi+1,j
左边
先证明左半部分:
p
i
,
j
−
1
≤
p
i
,
j
p_{i,j-1}\leq p_{i,j}
pi,j−1≤pi,j,设
k
=
p
i
,
j
−
1
,
p
=
p
i
,
j
k=p_{i,j-1},p=p_{i,j}
k=pi,j−1,p=pi,j,则我们反证,设
p
<
k
p<k
p<k:
一开始可以认为我们的条件有四个式子:
{
①
:
f
i
,
j
=
f
i
,
p
+
f
p
+
1
,
j
+
w
i
,
j
②
:
f
i
,
j
−
1
=
f
i
,
k
+
f
k
+
1
,
j
−
1
+
w
i
,
j
−
1
③
:
f
i
,
j
≤
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
④
:
f
i
,
j
−
1
≤
f
i
,
p
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
\left\{\begin{matrix} ①:f_{i,j}=f_{i,p}+f_{p+1,j}+w_{i,j}\hspace{1cm}\\ ②:f_{i,j-1}=f_{i,k}+f_{k+1,j-1}+w_{i,j-1}\\ ③:f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm}\\ ④:f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\hspace{0.0cm} \end{matrix}\right.
⎩
⎨
⎧①:fi,j=fi,p+fp+1,j+wi,j②:fi,j−1=fi,k+fk+1,j−1+wi,j−1③:fi,j≤fi,k+fk+1,j+wi,j④:fi,j−1≤fi,p+fp+1,j−1+wi,j−1
然后我们为了导出矛盾,可能会有两个式子:
{
A
:
f
i
,
j
−
1
>
f
i
,
p
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
B
:
f
i
,
j
≥
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
\left\{\begin{matrix} A:f_{i,j-1}> f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\\ B:f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm} \end{matrix}\right.
{A:fi,j−1>fi,p+fp+1,j−1+wi,j−1B:fi,j≥fi,k+fk+1,j+wi,j
其中
A
A
A矛盾叫做:“
k
k
k不是
f
i
,
j
−
1
f_{i,j-1}
fi,j−1的最优决策点”。(注意,这里如果证明
p
p
p与
k
k
k对于
f
i
,
j
−
1
f_{i,j-1}
fi,j−1一样优并不能导出矛盾,因为最优决策点并不一定唯一)
其中
B
B
B矛盾叫做:“
k
k
k也是
f
i
,
j
f_{i,j}
fi,j的最优决策点”。(因为综合条件③和
B
B
B能够知道,
f
i
,
j
=
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
f_{i,j}=f_{i,k}+f_{k+1,j}+w_{i,j}
fi,j=fi,k+fk+1,j+wi,j,说明
k
k
k也是
f
i
,
j
f_{i,j}
fi,j的最优决策点)
条件中没有大于号,很显然结论 B B B更容易推导。
证法1
一种平凡的证法:
已知: { ① : f i , j = f i , p + f p + 1 , j + w i , j ② : f i , j − 1 = f i , k + f k + 1 , j − 1 + w i , j − 1 ③ : f i , j ≤ f i , k + f k + 1 , j + w i , j ④ : f i , j − 1 ≤ f i , p + f p + 1 , j − 1 + w i , j − 1 \left\{\begin{matrix} ①:f_{i,j}=f_{i,p}+f_{p+1,j}+w_{i,j}\hspace{1cm}\\ ②:f_{i,j-1}=f_{i,k}+f_{k+1,j-1}+w_{i,j-1}\\ ③:f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm}\\ ④:f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\hspace{0.0cm} \end{matrix}\right. ⎩ ⎨ ⎧①:fi,j=fi,p+fp+1,j+wi,j②:fi,j−1=fi,k+fk+1,j−1+wi,j−1③:fi,j≤fi,k+fk+1,j+wi,j④:fi,j−1≤fi,p+fp+1,j−1+wi,j−1
要证: f i , j ≥ f i , k + f k + 1 , j + w i , j f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j} fi,j≥fi,k+fk+1,j+wi,j
首先是一番的推理:
首先因为最后一步已经用到了式③来证明
f
i
,
j
=
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
f_{i,j}=f_{i,k}+f_{k+1,j}+w_{i,j}
fi,j=fi,k+fk+1,j+wi,j,可以假设之间没有用到式③…然后因为带有不等号,所以必定含有式④:
f
i
,
j
−
1
≤
f
i
,
p
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}
fi,j−1≤fi,p+fp+1,j−1+wi,j−1
然后因为还少了
f
i
,
j
,
w
i
,
j
f_{i,j},w_{i,j}
fi,j,wi,j,我们可以把①的右边加④的左边,把左边加到右边,这样
f
i
,
j
f_{i,j}
fi,j与
w
i
,
j
w_{i,j}
wi,j的方向就对了,就得到:
f
i
,
j
−
1
+
f
i
,
p
+
f
p
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
+
f
i
,
p
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
f_{i,j-1}+f_{i,p}+f_{p+1,j}+\textcolor{blue}{w_{i,j}}\leq \textcolor{blue}{f_{i,j}}+f_{i,p}+f_{p+1,j-1}+w_{i,j-1}
fi,j−1+fi,p+fp+1,j+wi,j≤fi,j+fi,p+fp+1,j−1+wi,j−1
还约掉一项
f
i
,
p
f_{i,p}
fi,p:
f
i
,
j
−
1
+
f
p
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
f_{i,j-1}+f_{p+1,j}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}+w_{i,j-1}
fi,j−1+fp+1,j+wi,j≤fi,j+fp+1,j−1+wi,j−1
没什么想法,先把②带入进去:
f
i
,
k
+
f
k
+
1
,
j
−
1
+
w
i
,
j
−
1
+
f
p
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
f_{i,k}+f_{k+1,j-1}+w_{i,j-1}+f_{p+1,j}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}+w_{i,j-1}
fi,k+fk+1,j−1+wi,j−1+fp+1,j+wi,j≤fi,j+fp+1,j−1+wi,j−1
又约掉一项
w
i
,
j
−
1
w_{i,j-1}
wi,j−1:
f
i
,
k
+
f
k
+
1
,
j
−
1
+
f
p
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
+
f
p
+
1
,
j
−
1
f_{i,k}+f_{k+1,j-1}+f_{p+1,j}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}
fi,k+fk+1,j−1+fp+1,j+wi,j≤fi,j+fp+1,j−1
现在要想办法把右侧的
f
p
+
1
,
j
−
1
f_{p+1,j-1}
fp+1,j−1约掉,发现可以对左边用四边形不等式:
f
i
,
k
+
f
k
+
1
,
j
−
1
+
f
p
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
+
f
p
+
1
,
j
−
1
f_{i,k}+\textcolor{blue}{f_{k+1,j-1}+f_{p+1,j}}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}
fi,k+fk+1,j−1+fp+1,j+wi,j≤fi,j+fp+1,j−1
f
i
,
k
+
f
k
+
1
,
j
+
f
p
+
1
,
j
−
1
+
w
i
,
j
≤
f
i
,
k
+
f
k
+
1
,
j
−
1
+
f
p
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
+
f
p
+
1
,
j
−
1
f_{i,k}+\textcolor{blue}{f_{k+1,j}+f_{p+1,j-1}}+w_{i,j}\leq f_{i,k}+\textcolor{blue}{f_{k+1,j-1}+f_{p+1,j}}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}
fi,k+fk+1,j+fp+1,j−1+wi,j≤fi,k+fk+1,j−1+fp+1,j+wi,j≤fi,j+fp+1,j−1
f
i
,
k
+
f
k
+
1
,
j
+
f
p
+
1
,
j
−
1
+
w
i
,
j
≤
f
i
,
j
+
f
p
+
1
,
j
−
1
f_{i,k}+\textcolor{blue}{f_{k+1,j}+f_{p+1,j-1}}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}
fi,k+fk+1,j+fp+1,j−1+wi,j≤fi,j+fp+1,j−1
现在可以约掉
f
p
+
1
,
j
−
1
f_{p+1,j-1}
fp+1,j−1了:
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
≤
f
i
,
j
f_{i,k}+f_{k+1,j}+w_{i,j}\leq f_{i,j}
fi,k+fk+1,j+wi,j≤fi,j
QED.
证法2
一种更有技巧性的证法:
已知:
{
①
:
f
i
,
j
=
f
i
,
p
+
f
p
+
1
,
j
+
w
i
,
j
②
:
f
i
,
j
−
1
=
f
i
,
k
+
f
k
+
1
,
j
−
1
+
w
i
,
j
−
1
③
:
f
i
,
j
≤
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
④
:
f
i
,
j
−
1
≤
f
i
,
p
+
f
p
+
1
,
j
−
1
+
w
i
,
j
−
1
\left\{\begin{matrix} ①:f_{i,j}=f_{i,p}+f_{p+1,j}+w_{i,j}\hspace{1cm}\\ ②:f_{i,j-1}=f_{i,k}+f_{k+1,j-1}+w_{i,j-1}\\ ③:f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm}\\ ④:f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\hspace{0.0cm} \end{matrix}\right.
⎩
⎨
⎧①:fi,j=fi,p+fp+1,j+wi,j②:fi,j−1=fi,k+fk+1,j−1+wi,j−1③:fi,j≤fi,k+fk+1,j+wi,j④:fi,j−1≤fi,p+fp+1,j−1+wi,j−1
要证: f i , j ≥ f i , k + f k + 1 , j + w i , j f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j} fi,j≥fi,k+fk+1,j+wi,j
因为不等号方向不对,所以不能有③,因为式中有
w
i
,
j
w_{i,j}
wi,j,所以必须把①带进去,消掉
w
i
,
j
w_{i,j}
wi,j:
f
i
,
p
+
f
p
+
1
,
j
≥
f
i
,
k
+
f
k
+
1
,
j
f_{i,p}+f_{p+1,j}\geq f_{i,k}+f_{k+1,j}
fi,p+fp+1,j≥fi,k+fk+1,j
f
i
,
k
+
f
k
+
1
,
j
≤
f
i
,
p
+
f
p
+
1
,
j
f_{i,k}+f_{k+1,j}\leq f_{i,p}+f_{p+1,j}
fi,k+fk+1,j≤fi,p+fp+1,j
(这是要证明的式子)
这个式子的意思就是在
f
i
,
j
f_{i,j}
fi,j意义下
k
k
k比
p
p
p优。
而我们知道在 f i , j − 1 f_{i,j-1} fi,j−1意义下 k k k比 p p p优: f i , k + f k + 1 , j − 1 ≤ f i , p + f p + 1 , j − 1 f_{i,k}+f_{k+1,j-1}\leq f_{i,p}+f_{p+1,j-1} fi,k+fk+1,j−1≤fi,p+fp+1,j−1
我们可以比较一下这两个式子:
条件:
f
i
,
k
+
f
k
+
1
,
j
−
1
≤
f
i
,
p
+
f
p
+
1
,
j
−
1
条件:f_{i,k}+\textcolor{blue}{f_{k+1,j-1}}\leq f_{i,p}+\textcolor{blue}{f_{p+1,j-1}}
条件:fi,k+fk+1,j−1≤fi,p+fp+1,j−1
结论:
f
i
,
k
+
f
k
+
1
,
j
≤
f
i
,
p
+
f
p
+
1
,
j
结论:f_{i,k}+\textcolor{red}{f_{k+1,j}}\leq f_{i,p}+\textcolor{red}{f_{p+1,j}}
结论:fi,k+fk+1,j≤fi,p+fp+1,j
若有: 条件 + T = 结论 条件+T=结论 条件+T=结论,则 T : f p + 1 , j − 1 + f k + 1 , j ≤ f k + 1 , j − 1 + f p + 1 , j T:\textcolor{blue}{f_{p+1,j-1}}+\textcolor{red}{f_{k+1,j}}\leq \textcolor{blue}{f_{k+1,j-1}}+\textcolor{red}{f_{p+1,j}} T:fp+1,j−1+fk+1,j≤fk+1,j−1+fp+1,j,恰为四边形不等式,证毕。
因此我们知道
f
i
,
j
≥
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j}
fi,j≥fi,k+fk+1,j+wi,j,而我们又知道
f
i
,
j
≤
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}
fi,j≤fi,k+fk+1,j+wi,j,因此
f
i
,
j
=
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
f_{i,j}= f_{i,k}+f_{k+1,j}+w_{i,j}
fi,j=fi,k+fk+1,j+wi,j。
这说明如果存在一个
p
>
k
p>k
p>k,则
k
k
k必然也是
f
i
,
j
f_{i,j}
fi,j的最优决策点,因此只需要枚举到
k
k
k。
右边
接下来证明右边:
要证 p i , j ≤ p i + 1 , j p_{i,j}\leq p_{i+1,j} pi,j≤pi+1,j,设 p = p i , j , k = p i + 1 , j p=p_{i,j},k=p_{i+1,j} p=pi,j,k=pi+1,j,就假设 p > k p>k p>k。
我们仿照左边的思路,想要从“ f i + 1 , j f_{i+1,j} fi+1,j意义下 k k k更优”推出“ f i , j f_{i,j} fi,j意义下 k k k更优”。
想要证明
f
i
,
j
≥
f
i
,
k
+
f
k
+
1
,
j
+
w
i
,
j
f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j}
fi,j≥fi,k+fk+1,j+wi,j,即:
结论
:
f
i
,
k
+
f
k
+
1
,
j
≤
f
i
,
p
+
f
p
+
1
,
j
结论:f_{i,k}+f_{k+1,j} \leq f_{i,p}+f_{p+1,j}
结论:fi,k+fk+1,j≤fi,p+fp+1,j
我们知道对于
f
i
+
1
,
j
f_{i+1,j}
fi+1,j来说,
k
k
k优于
p
p
p:
条件
:
f
i
+
1
,
k
+
f
k
+
1
,
j
≤
f
i
+
1
,
p
+
f
p
+
1
,
j
条件:f_{i+1,k}+f_{k+1,j}\leq f_{i+1,p}+f_{p+1,j }
条件:fi+1,k+fk+1,j≤fi+1,p+fp+1,j
设: 条件 + T = 结论 条件+T=结论 条件+T=结论,用还原不等式的方法求出 T T T, T T T恰是四边形不等式。
4.证明时间复杂度
枚举决策点的总次数约为:
∑
l
e
n
=
1
n
∑
i
=
1
2
n
−
l
e
n
+
1
p
i
+
1
,
i
+
l
e
n
−
1
−
p
i
,
i
+
l
e
n
−
2
+
1
{\overset{n}{\underset{len=1}\sum}}{\overset{2n-len+1}{\underset{i=1}\sum}}p_{i+1,i+len-1}-p_{i,i+len-2}+1
len=1∑ni=1∑2n−len+1pi+1,i+len−1−pi,i+len−2+1
≤
∑
l
e
n
=
1
n
∑
i
=
1
2
n
p
i
+
1
,
i
+
l
e
n
−
1
−
p
i
,
i
+
l
e
n
−
2
+
1
\leq {\overset{n}{\underset{len=1}\sum}}{\overset{2n}{\underset{i=1}\sum}}p_{i+1,i+len-1}-p_{i,i+len-2}+1
≤len=1∑ni=1∑2npi+1,i+len−1−pi,i+len−2+1
=
∑
l
e
n
=
1
n
(
∑
i
=
1
2
n
p
i
+
1
,
i
+
l
e
n
−
1
−
∑
i
=
1
2
n
p
i
,
i
+
l
e
n
−
2
)
+
n
= {\overset{n}{\underset{len=1}\sum}}\left({\overset{2n}{\underset{i=1}\sum}}p_{i+1,i+len-1}-{\overset{2n}{\underset{i=1}\sum}}p_{i,i+len-2}\right)+n
=len=1∑n(i=1∑2npi+1,i+len−1−i=1∑2npi,i+len−2)+n
=
∑
l
e
n
=
1
n
(
∑
i
=
2
2
n
+
1
p
i
,
i
+
l
e
n
−
2
−
∑
i
=
1
2
n
p
i
,
i
+
l
e
n
−
2
)
+
n
= {\overset{n}{\underset{len=1}\sum}}\left({\overset{2n+1}{\underset{i=2}\sum}}p_{i,i+len-2}-{\overset{2n}{\underset{i=1}\sum}}p_{i,i+len-2}\right)+n
=len=1∑n(i=2∑2n+1pi,i+len−2−i=1∑2npi,i+len−2)+n
=
∑
l
e
n
=
1
n
p
2
n
+
1
,
2
n
+
l
e
n
−
1
−
p
1
,
l
e
n
−
1
+
n
= {\overset{n}{\underset{len=1}\sum}}p_{2n+1,2n+len-1}-p_{1,len-1}+n
=len=1∑np2n+1,2n+len−1−p1,len−1+n
=
∑
l
e
n
=
1
n
O
(
n
)
= {\overset{n}{\underset{len=1}\sum}}O(n)
=len=1∑nO(n)
=
O
(
n
2
)
=O(n^2)
=O(n2)
转移复杂度为 O ( 1 ) O(1) O(1),因此证完。
石子合并求最大值
原来的代码:
for(int len=2;len<=n;len++){ 区间长度
for(int i=1,j;(j=i+len-1)<=2*n;i++){ 区间端点
for(int k=i;k<j;k++){ 区间分割点
g[i][j]=max(g[i][j],g[i][k]+g[k+1][j]+s[j]-s[i-1]);
}
}
}
新的代码:
for(int len=2; len<=n; len++){ 区间长度
for(int i=1,j; (j=i+len-1)<=2*n; i++){ 区间端点
g[i][j]=max(g[i][j-1],g[i+1][j])+s[j]-s[i-1];
}
}
因为最大值的最优决策一定能在两端取得,也即:
g
i
,
j
=
max
{
g
i
,
j
−
1
,
g
i
+
1
,
j
}
+
w
i
,
j
g_{i,j}=\max\{g_{i,j-1},g_{i+1,j}\}+w_{i,j}
gi,j=max{gi,j−1,gi+1,j}+wi,j
证明
*请注意接下来证明中“左端”和“左侧”的区别,对于区间 [ i , j ] = [ i , k ] + [ k + 1 , j ] [i,j]=[i,k]+[k+1,j] [i,j]=[i,k]+[k+1,j],左端指的是 [ i , i ] [i,i] [i,i],而左侧指的是 [ i , k ] [i,k] [i,k]
要证明最大值的最优决策一定会在两端取得,可以考虑 g i , j g_{i,j} gi,j的最优决策,因此归纳所有区间长度小于 j − i + 1 j-i+1 j−i+1的区间全都符合假设:
反证,假设端点不是最优决策点(反论题),设最优决策点为
k
(
i
<
k
<
j
−
1
)
k(i<k<j-1)
k(i<k<j−1),则:
g
i
,
j
=
g
i
,
k
+
g
k
+
1
,
j
+
w
i
,
j
g_{i,j}=g_{i,k}+g_{k+1,j}+w_{i,j}
gi,j=gi,k+gk+1,j+wi,j
现在考虑区间 g i , k g_{i,k} gi,k,我们知道 g i , k g_{i,k} gi,k的最优决策一定在其两端取得。假设在左端取得,则 g i , j = g i + 1 , k + w i , k + g k + 1 , j + w i , j g_{i,j}=g_{i+1,k}+w_{i,k}+g_{k+1,j}+w_{i ,j} gi,j=gi+1,k+wi,k+gk+1,j+wi,j
我们可以构造一种方案,先把
[
i
+
1
,
k
]
[i+1,k]
[i+1,k]和
[
k
+
1
,
j
]
[k+1,j]
[k+1,j]合并,再把
[
i
+
1
,
j
]
[i+1,j]
[i+1,j]和
[
i
,
i
]
[i,i]
[i,i]合并,贡献就是:
g
i
,
j
′
=
g
i
+
1
,
k
+
g
k
+
1
,
j
+
w
i
+
1
,
j
+
w
i
,
j
g'_{i,j}=g_{i+1,k}+g_{k+1,j}+w_{i+1,j}+w_{i,j}
gi,j′=gi+1,k+gk+1,j+wi+1,j+wi,j
对比
g
i
,
j
g_{i,j}
gi,j和这个式子:
g
i
,
j
=
g
i
+
1
,
k
+
w
i
,
k
+
g
k
+
1
,
j
+
w
i
,
j
g_{i,j}=g_{i+1,k}+\textcolor{blue}{w_{i,k}}+g_{k+1,j}+w_{i ,j}
gi,j=gi+1,k+wi,k+gk+1,j+wi,j
g
i
,
j
′
=
g
i
+
1
,
k
+
w
i
+
1
,
j
+
g
k
+
1
,
j
+
w
i
,
j
g'_{i,j}=g_{i+1,k}+\textcolor{red}{w_{i+1,j}}+g_{k+1,j}+w_{i,j}
gi,j′=gi+1,k+wi+1,j+gk+1,j+wi,j
若
w
i
,
k
≤
w
i
+
1
,
j
\textcolor{blue}{w_{i,k}}\leq \textcolor{red}{w_{i+1,j}}
wi,k≤wi+1,j:
则显然,
g
i
,
j
≥
g
i
,
j
′
g_{i,j}\geq g'_{i,j}
gi,j≥gi,j′,则说明
i
i
i也是最优决策点(由于假设
g
i
,
j
g_{i,j}
gi,j),与反论题矛盾.
否则:
w
i
,
k
>
w
i
+
1
,
j
\textcolor{blue}{w_{i,k}}>\textcolor{red}{w_{i+1,j}}
wi,k>wi+1,j
即:
a
i
>
w
k
+
1
,
j
\textcolor{blue}{a_i}>\textcolor{red}{w_{k+1,j}}
ai>wk+1,j
(说明右侧所有石子的大小加起来还没有
a
i
a_i
ai大)
此时我们构造一种方案:
先把
[
i
,
k
]
[i,k]
[i,k]合并好,
[
k
+
1
,
j
]
[k+1,j]
[k+1,j]区间保留原始的样子,然后把右侧的石子依次逐个加入左边的堆中,这种方案的总贡献为:
g
i
,
j
′
′
=
g
i
,
k
+
(
∑
t
=
k
+
1
j
−
1
w
i
,
t
)
+
w
i
,
j
≥
g
i
,
k
+
(
j
−
k
−
1
)
⋅
a
i
+
w
i
,
j
>
g
i
,
k
+
(
j
−
k
−
1
)
⋅
w
k
+
1
,
j
+
w
i
,
j
g''_{i,j}=g_{i,k}+\left(\overset{j-1}{\underset{t=k+1}\sum}w_{i,t}\right)+w_{i,j}\geq g_{i,k}+(j-k-1)\cdot \textcolor{blue}{a_i}+w_{i,j}\textcolor{black}> g_{i,k}+(j-k-1)\cdot \textcolor{red}{w_{k+1,j}}+w_{i,j}
gi,j′′=gi,k+(t=k+1∑j−1wi,t)+wi,j≥gi,k+(j−k−1)⋅ai+wi,j>gi,k+(j−k−1)⋅wk+1,j+wi,j
而我们知道
g
g
g函数也像
f
f
f一样具有上界:
g
k
+
1
,
j
≤
(
j
−
k
−
1
)
⋅
w
k
+
1
,
j
\color{red}g_{k+1,j}\leq (j-k-1)\cdot w_{k+1,j}
gk+1,j≤(j−k−1)⋅wk+1,j
因此:
g
i
,
j
′
′
>
g
i
,
k
+
(
j
−
k
−
1
)
⋅
w
k
+
1
,
j
+
w
i
,
j
≥
g
i
,
k
+
g
k
+
1
,
j
+
w
i
,
j
=
g
i
,
j
g''_{i,j}> g_{i,k}+\textcolor{red}{(j-k-1)\cdot w_{k+1,j}}+w_{i,j}\textcolor{red}{\geq} g_{i,k}+\textcolor{red}{g_{k+1,j}}+w_{i,j}=g_{i,j}
gi,j′′>gi,k+(j−k−1)⋅wk+1,j+wi,j≥gi,k+gk+1,j+wi,j=gi,j
此时, g i , j ′ ′ > g i , j g''_{i,j}>g_{i,j} gi,j′′>gi,j,证明新方案严格优于原方案,说明 k k k不是最优决策点,矛盾。
大概意思就是说,对于区间 [ i , k ] [i,k] [i,k]的最优决策点在其左端的情况,假如说 w i , k ≤ w i + 1 , j w_{i,k}\leq w_{i+1,j} wi,k≤wi+1,j,则 [ i , j ] [i,j] [i,j]的左端点必然为最优决策点,矛盾。否则, [ i , j ] [i,j] [i,j]的右端点比 k k k更优, k k k不为最优决策点,矛盾。
同理可证明,当区间 [ k + 1 , j ] [k+1,j] [k+1,j]的最优决策点在其右端取得时,也会产生矛盾。
因此,根据现在的证明,在反论题成立的情况下,区间 [ i , k ] [i,k] [i,k]的最优决策点为其右端点,而区间 [ k + 1 , j ] [k+1,j] [k+1,j]的最优决策点为其左端点。
接下来证明这种情况不存在。
我们讨论区间
[
i
,
k
]
\color{blue}[i,k]
[i,k]和区间
[
k
+
1
,
j
]
\color{red}[k+1,j]
[k+1,j]:
我们已经知道了
[
i
,
k
]
\color{blue}[i,k]
[i,k]的最优决策点是
k
k
k:
g
i
,
k
=
g
i
,
k
−
1
+
w
i
,
k
\color{blue} g_{i,k}=g_{i,k-1}+w_{i,k}
gi,k=gi,k−1+wi,k
同理我们知道
[
k
+
1
,
j
]
\color{red}[k+1,j]
[k+1,j]的最优决策点是
k
+
1
k+1
k+1:
g
k
+
1
,
j
=
g
k
+
2
,
j
+
w
k
+
1
,
j
\color{red} g_{k+1,j}=g_{k+2,j}+w_{k+1,j}
gk+1,j=gk+2,j+wk+1,j
总的贡献是:
g
i
,
j
=
g
i
,
k
+
g
k
+
1
,
j
+
w
i
,
j
=
g
i
,
k
−
1
+
w
i
,
k
+
g
k
+
2
,
j
+
w
k
+
1
,
j
+
w
i
,
j
g_{i,j}=\textcolor{blue}{g_{i,k}}+\textcolor{red}{g_{k+1,j}}+w_{i,j}=\textcolor{blue}{g_{i,k-1}+w_{i,k}}+\textcolor{red}{g_{k+2,j}+w_{k+1,j}}+w_{i,j}
gi,j=gi,k+gk+1,j+wi,j=gi,k−1+wi,k+gk+2,j+wk+1,j+wi,j
这时候我们再构造另一种方案,先把
[
k
,
k
]
[k,k]
[k,k]合并到
[
i
,
k
−
1
]
\color{blue}[i,k-1]
[i,k−1]中,然后再把
[
k
+
1
,
k
+
1
]
[k+1,k+1]
[k+1,k+1]加入到
[
i
,
k
]
\color{blue}[i,k]
[i,k]中,最后再把
[
i
,
k
+
1
]
\color{blue}[i,k+1]
[i,k+1]和
[
k
+
2
,
j
]
\color{red}[k+2,j]
[k+2,j]合并,这样做的贡献是:
g
i
,
j
′
=
2
⋅
g
i
,
k
−
1
+
w
i
,
k
+
w
i
,
k
+
1
+
g
k
+
2
,
j
+
w
k
+
2
,
j
+
w
i
,
j
=
2
⋅
g
i
,
k
−
1
+
2
⋅
w
i
,
k
+
g
k
+
2
,
j
+
w
k
+
1
,
j
+
w
i
,
j
≥
g
i
,
j
g'_{i,j}=\textcolor{blue}{2\cdot g_{i,k-1}+w_{i,k}+w_{i,k+1}}+\textcolor{red}{g_{k+2,j}+w_{k+2,j}}+w_{i,j}=\textcolor{blue}{2\cdot g_{i,k-1}+2\cdot w_{i,k}}+\textcolor{red}{g_{k+2,j}+w_{k+1,j}}+w_{i,j}\geq g_{i,j}
gi,j′=2⋅gi,k−1+wi,k+wi,k+1+gk+2,j+wk+2,j+wi,j=2⋅gi,k−1+2⋅wi,k+gk+2,j+wk+1,j+wi,j≥gi,j
因为有假设最优决策点是
k
k
k,就会有
g
i
,
j
≥
g
i
,
j
′
g_{i,j}\geq g'_{i,j}
gi,j≥gi,j′,因此
g
i
,
j
=
g
i
,
j
′
g_{i,j}=g'_{i,j}
gi,j=gi,j′。
这样就说明
k
−
1
k-1
k−1这个位置也是最优决策点。
同理说明
k
−
2
k-2
k−2也是最优决策点…说明
k
−
3
k-3
k−3也是最优决策点…因此说明
i
i
i是区间
[
i
,
j
]
[i,j]
[i,j]最优决策点。与假设矛盾。
*注意这里证明左端点是最优决策点是为了导出矛盾,是在说明在反论题成立的情况下,这种情况不存在,而不是真的说明左端点永远是最优决策点。
(其实这时候甚至能证明出区间中的每一个点都是最优决策点。但是我们的假设是“假定两端不是最优决策点”,因此只要证出来两端是最优决策点就矛盾了)
因此反论题为假命题。
QED.
一种说法是 g i , j g_{i,j} gi,j的最优决策点一定取自 a i , a j a_i,a_j ai,aj中较小的那一端,这种说法是错误的。
题解视频