1. 程式人生 > >演算法導論 4-7

演算法導論 4-7

一個m×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陣

37 23 22 32
21 6 7 10
53 34 30 31
32 13 9 6
43 21 15 8

c)假設f(i)是第i行包含最左端最小值的列的索引值。證明對任何的m×n Monge矩陣,有f(1)<=f(2)…<=f(m)

d)以下是一段關於分治演算法的描述,用來計算m×n Monge矩陣A的每一行的最左端最小值:

構造一個包含所有A的偶數行的子矩陣A'。遞迴地計算A'中每一行的最左端最小值。然後計算A中奇數行的最左端最小值。

解釋如何能在O(m+n)時間內計算出A的奇數行的最左端最小值?(假設偶數行的最左端最小值已知)

e)寫出d部分所描述演算法執行時間的遞迴式,並證明其解為O(m+nlgm)