分治法-求最大最小元素

本文介绍了如何使用分治法在给定的元素集合中找出最大和最小元素。首先,通过直接遍历集合的方法找到初始的最大和最小值。然后,利用二分法将集合分为两个子集合,通过递归策略分别计算子集合的最大值和最小值,最终得到整个集合的最大值和最小值。
摘要由CSDN通过智能技术生成

给定含有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 //两个元素的情况
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值