4-7 Monge矩阵
一个m x n的实数矩阵A,如果对所有i,j,k和l,1≤ i<k ≤ m和1≤ j<l ≤ n,有
A[i,j]+A[k,l] ≤ A[i,l]+A[k,j]
那么,此矩阵A为Monge矩阵。换句话说,每当我们从Monge矩阵中挑出两行与两列,并且考虑行列交叉处的4个元素,左上角与右下角的和小于或等于左下角与右上角元素的和。
a)证明一个矩阵为Monge阵,当且仅当对所有i=1,2,...,m-1和j=1,2,...,n-1,有
A[i,j]+A[i+1,j+1] ≤ A[i,j+1]+A[i+1,j]
(提示:在当部分,对行、列分别使用归纳法。)
b)下面的矩阵不是Monge阵。改变一个元素,把它变成Monge阵(提示:利用a)的结论)
37 23 22 32
21 6 27 10
53 34 30 31
32 13 9 6
43 21 15 8
c)假设f(i)是第i行包含最左端最小值的列的索引值。证明对任何的m x n Monge矩阵,有f(1) ≤ f(2) ≤...≤ f(m)。
d)以下是一段关于分治算法的描述,用来计算m x n Monge矩阵A中每一行的最左端最小值:
构造一个包含所有A的偶数行的子矩阵A'。递归地计算A'中每一行的最左端最小值。然后计算A中奇数行的最左端最小值。
解释如何能在O(m+n)时间内计算出A的奇数行的最左端最小值?(假设偶数行最左端最小值已知)
e)写出d)部分所描述算法的运行时间的递归式,并证明其解为O(m+nlogm)
分析与解答:
a)先对列使用归纳法,先假定行不变为m,在列数小于或等于n时,矩阵A是Monge矩阵,考察列为n+1的
任意取第i,k两行,第j,n+1列的四个交点,则只需证明
A[i, k]+A[j, n+1] ≤ A[i, n+1]+A[j, k]
由于mxn的矩阵为Monge矩阵,则满足
A[i, k]+A[j, n] ≤ A[i, n]+A[j,k] (1)
同时利用递归假设
A[i, n]+A[j,n+1] ≤ A[i, n+1]+A[j,n] (2)
联立(1)、(2)就可以得到 A[i, k]+A[j, n+1] ≤ A[i, n+1]+A[j, k],故归纳法成立
对于行的情况,可以采用类似的思路。
b)第2行第3列元素不满足Monge矩阵的定义,假设这个元素为x
则利用A[i,j]+A[i+1,j+1] ≤ A[i,j+1]+A[i+1,j],可以求得(此处忽略)
2 ≤ x ≤ 5
c)采用反证法,若第m的最左端最小值为f(m),第m+1的最左端最小值为f(m+1),示意图如下:
考虑图中的两列,由于满足Monge的定义,则
A[m, f(m+1)] + A[m+1, f(m)] ≤ A[m, f(m)] + A[m+1, f(m+1)]
根据f(m)、f(m+1)的定义知:
A[m, f(m)] < A[m, f(m+1)] (注意此处不能取等号,因为f(m)是最左端最小值)
A[m+1, f(m+1)] ≤ A[m+1, f(m)]
联立知 A[m, f(m+1)] + A[m+1, f(m)] > A[m, f(m)] + A[m+1, f(m+1)]
和上面的Monge的定义矛盾,故假设不成立,由此
f(1) ≤ f(2) ≤...≤ f(m)
d)假定已知偶数行的最左端的最小值f(2), f(4), ...则奇数上的最左端的最小值满足:f(2k) ≤ f(2k+1) ≤ f(2(k+1)
即夹在两个偶数行的的最左端的最小值之间,故奇数行的最左端的最小值总的搜索范围为列数。
由于偶数行的f最左端的最小值被重复计算了2次,故计算奇数行的最左端的最小值的运行时间为O(n+m/2),即为O(n+m)。
e)该算法的运行时间的递归式
T(m) = T(m/2) +O(m+n)
由主定律,T(m) = O(m+nlogm)