实验一 分治与递归算法的应用 一、实验目的 1.掌握分治算法的基本思想(分-治-合)、技巧和效率分析方法
2.熟练掌握用递归设计分治算法的基本步骤(基准与递归方程)
3.学会利用分治算法解决实际问题
实验内容 金块问题 老板有一袋金块(共n 块,n 是2 的幂(n≥2)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块
假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块
并对自己的程序进行复杂性分析
问题分析: 一般思路:假设袋中有n 个金块
可以用函数 M a x(程序1 - 3 1)通过 n-1 次比 较找到最 重的金块
找到最重的金块后,可以从余下的n-1 个金块中用类似法通过 n-2 次比较找出最轻的金块
这样,比较的总次数为 2n-3
分治法:当n 很小时,比如说, n≤2,识别出最重和最轻的金块,一次比较就足够了
当n 较大时(n>2),第一步,把这袋金块平分成两个小袋 A 和 B
第二步,分别找出在 A 和 B 中最重和最轻的金块
设 A 中最重和最轻的金块分别为 HA 与 LA,以此类推,B 中最重和最轻的金块分别为 HB 和 LB
第三步,通过比较HA 和 HB,可以找到所有金块中最重的;通过比较 LA 和 LB,可以找到所有金块中最轻的
在第二步中,若 n>2,则递归地应 用分而治之方法 程序设计 据上述步骤,可以得出程序 1 4 - 1 的非递归代码
该程序用于寻找到数组 w [ 0 : n - 1 ]中的最小数和最大数,若 n < 1,则程序返回 f a l s e,否则返回 t r u e
当n≥1 时,程序 1 4 - 1 给 M i n 和 M a x置初值以使 w [ M i n ]是最小的重量,w [ M a x ]为最大的重量
首先处理 n≤1 的情况
若 n>1 且为奇数,第一个