算法设计与分析学习笔记与习题4

笔记

习题5.1

2.

a.为一个分治算法编写伪代码,该算法同时求出一个 n 元素数组的最大元素和最小元素的值。
b. 假设 n = 2k,为该算法的键值比较次数建立递推关系式并求解。
c. 请将该算法与同样问题的蛮力算法做一个比较。

a. 解:
算法思想:将数组 A 划分为大小大致相等的两个子数组;递归地对这两个子数组求最大元素和最小元素;将两个子数组的最大元素进行比较,返回数组 A 的最大元素,将其最小元素进行比较,返回数组 A 的最小元素;当 n 不超过 2 时,递归终止,此时最多通过一次比较就可得到最大元素与最小元素。
假设 max {a, b} , min {a, b} 分别为通过一次比较产生出两者之间的最大者与最小者的标准过程。算法的Pascal伪代码如下:

Algorithm Max-Min (A, M, N)
//输入:n 个元素的数组 A
//输出:数组 A 的最大元素 M 和最小元素 N
begin
	if n = 1 then M := A[0] and N := A[0]
	else if n = 2 then M = max{A[0], A[1]} and N := min{A[0], A[1]} 
	else begin
		B := A[0.. ⌊n/2⌋ ], C := A[ ⌊n/2⌋ +1..n-1];(向下取整)
		Max-Min(B, M0 , N0 );
		Max-Min(C, M1 , N1 );
		M := max{ M0 , M1 };
		N := min{N0 , N1 };
	end;
end.

b:设 T(n) 为算法求 n 个元素数组的最大元素和最小元素的基本运算次数,此时的基本运算为比较。当 n = 2 n=2 n=2 时, T ( 2 ) = 1 T(2)=1 T(2)=1 n = 1 n=1 n=1 时, T ( 1 ) = 0 T(1)=0 T(1)=0 , 则 n ≥ 2 n≥2 n2 时有:
T ( n ) = 2 T ( n / 2 ) + 2 T(n) = 2T(n/2)+2 T(n)=2T(n/2)+2
= 2 ⋅ ( 2 T ( n / 4 ) + 2 ) + 2 = 2 \cdot (2T(n/4)+2)+2 =2(2T(n/4)+2)+2
= . . . . . . = ... ... =......
= 2 k − 1 ⋅ T ( n / ( 2 k − 1 ) ) + 2 k − 1 + . . . + 2 = 2^{k-1} \cdot T(n/(2^{k - 1}) )+2^{k - 1} + ... +2 =2k1T(n/(2k−<

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值