1、实验一 分治与递归算法的应用一、实验目的1掌握分治算法的基本思想(分-治-合) 、技巧和效率分析方法。2熟练掌握用递归设计分治算法的基本步骤(基准与递归方程) 。3学会利用分治算法解决实际问题。二、实验内容 1.问题描述:题目一:大整数乘法用分治算法编程实现两个 n 位十进制大整数的乘法运算。题目二:线性时间选择给定 n 个元素和一个整数 k,要求用 O(n)时间找出这 n 个元素中第 k 小元素。题目三:二分搜索算法设 a0:n-1是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素 x 不在数组中时,返回小于 x 的最大元素的位置 i 和大于 x 的最小元素位置j。当搜索元素在数组中时
2、,i 和 j 相同,均为 x 在数组中的位置。并对自己的程序进行复杂性分析。题目四:金块问题老板有一袋金块(共 n 块,n 是 2 的幂(n2) ),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。并对自己的程序进行复杂性分析。题目五:双色四圆盘梵塔问题与梵塔问题相同,设 ABC 是 3 个塔座,初始时塔座 A 上有四个圆盘,各圆盘从小到大编号为:1、2、3、4,奇数号圆盘为红色,偶数号圆盘为蓝色。现要求将塔座 A 上的圆盘移到塔座 C 上,除满足梵塔问题的移动规则外,还必须满足:任何时刻不允许将同色圆盘叠在一起
3、。试设计一个算法,以最少次数完成上述移动,并输出每次移动的圆盘编号、起始塔座、目的塔座。并对自己的程序进行复杂性分析。题目六:桶排序问题明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数(N100) ,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作,并对自己的程序进行复杂性分析。【输入样例】1020 40 32 67 40 20 89 300 400 15【输出样例】815 20 32 40 67 89 300 4002.数据输入:个人设定,由键盘输入。3.要求:1)上述题目任选一做。上机前,完成程序代码的编写2)独立完成实验及实验报告三、实验步骤1.理解算法思想和问题要求;2.编程实现题目要求;3.上机输入和调试自己所编的程序;4.验证分析实验结果;5.整理出实验报告。附:实验报告的主要内容一实验目的二问题描述三算法设计包含:数据结构与核心算法的设计描述、函数调用及主函数设计、主要算法流程图等四.程序调试及运行结果分析五.实验总结附录:程序清单 (程序过长,可附主要部分)