赞
踩
给定含有n个元素的集合,在其中找出最大和最小元素。
直接找最大和最小元素
procedure STRAITMAXMIN(A, n, max, min)
//将A中的最大值置于max,最小值置于min//
Integer i, n
max←min←A(1)
for i←2 to n do
if A(i) > max then max←A(i) endif
if A(i) < min then min←A(i) endif
repeat
end STRAITMAXMIN
分治求解策略
–记问题的一个实例为:
I = (n, A(1), … , A(n))
–采用二分法将I分成两个子集合处理
I1 = (n/2, A(1), …, A(n/2)), 和
I2 = (n- n/2, A(n/2+1), …, A(n))
–则有,
MAX(I) = max(MAX(I1), MAX(I2))
MIN(I) = min(MIN(I1), MIN(I2))
–采用递归的设计策略,得到以下算法
- procedure MAXMIN(i, j, fmax, fmin)
- //A(1:n)是含有n个元素的数组,参数i, j是整数,1≤i, j≤n //
- //该过程把A(i:j)中的最大和最小元素分别赋给fmax和fmin //
- integer i, j; global n, A(1:n)
- case
- :i=j: fmax←fmin←A(i) //只有一个元素
- :i=j-1:if A(i)<A(j) then fmax←A(j); fmin←A(i)
- else fmax←A(i); fmin←A(j) endif //两个元素的情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。