算法导论 4-7

1 题目

一个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阵

37232232
216710
53343031
321396
4321158

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)

2 分析与解答

a)

证明:

  1. 必要性:设k=i+1,l=j+1,显然i,k,j,l满足Mango矩阵对于元素下标的假设,将k,l 带入Mango矩阵的不等式中,必要性得证
  2. 充分性:当一个2×2矩阵满足a)中不等式时,是Monge矩阵。

    当一个2×k矩阵满足a)中不等式时,假设其是Monge矩阵,如果将此矩阵最右端扩展一 列,形成2×(k+1)矩阵,并且满足a)中的不等式,即

    A[1,k]+A[2,k+1] <= A[1,k+1]+A[2,k]

    由于原2×k矩阵是Monge矩阵,所以A[1,i]+A[2,k] <= A[1,k]+A[2,i]

    所以A[1,i]+A[2,k]-A[2,i] <= A[1,k],所以A[1,i]+A[2,k]-A[2,i]+A[2,k+1] <= A[1,k+1]+A[2,k] ;

    所以A[1,i]+A[2,k+1] <= A[1,k+1]+A[2,i],所以扩展的2×(k+1)矩阵是Monge矩阵,由 归纳法可知,满足题设条件的所有2×n矩阵是Monge矩阵。

    将满足题设条件的2×n扩展成m×n矩阵,并且m×n矩阵满足题设条件,那么根据上一步 的结论, 矩阵的任意两行都构成Monge矩阵 ,那么对于此m×n矩阵,就有对所有i,j, k和l,1 <= i < k <=m和1 <= j < l <= n,有A[i,j]+A[k,l]<=A[i,l]+A[k,j],即证明 满足题设条件的m×n矩阵为Monge矩阵。

b)

用c)中结论,将第一行第2,3个元素交换即可

c)

证明:用反证法,假设1<=i<j<=m,有f(i)>f(j),那么一定有,

A[i,f(j)]+A[j,f(i)]>min(A[i][1..n])+min(A[j][1…n])=A[i,f(i)]+A[j,f(j)],这是与Monge矩阵的定义相悖的,所以,若一个矩阵是Monge矩阵,必然满足题目结论

d)

沿用c)中的标识,f(i)表示第i行最左端最小值的列索引。如果偶数行的f(i)已知,那么奇数行j的最左端最小值只需在f(j-1)和f(j+1)之间搜索(第一行在1到f(2)之间搜索),若m为奇数,那么m行最左端最小值要在f(m-1)到n中搜索。不难理解,最坏情况下,总的搜索次数是f(2)+∑i=2n/2(f(2i)-f(2i-2))[+n-f(n-1)] =f(2)+f(4)-f(2)+f(6)-f(4)…=n加上访问每行的代价为O(m),所以总代价为O(m+n)

e)

T(m)=T(m/2)+D(m)+C(m),其中,D(m)是将矩阵分割成偶数行的操作,其时间代价为D(m)=O(m);C(m)是从f(i-1)至f(i+1)之间找到奇数行的最小值,其每次递归的代价为ni ,T(m)=T(m/2)+O(m)+∑ ni ,简单画出递归树:


可见,在分解和解决完成后,每步合并都会在n步内完成,也就是ni =O(n),通过递归树可以看到需要合并的步骤数是Θ(lgm),所以C(m)=O(nlgm)。再由递归树得到,T(m)=m∑i=0lgm-1(1/2i )+O(nlgm)=2(1+m)+O(nlgm)=O(m)+O(nlgm)=O(m+nlgm)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值