算法设计与分析实验指导1_分治与递归
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法设计与分析》实验指导
实验一分治与递归
一、实验目的:
1. 理解递归的概念。
2. 掌握设计有效算法的分治策略。
3. 掌握C++面向对象编程方法。
二、实验指导
1. 分治法的总体思想
求解一个复杂问题可以将其分解成若干个子问题,子问题还可以进一步分解成更小的问题,直到分解所得的小问题是一些基本问题,并且其求解方法是已知的,可以直接求解为止。
分治法作为一种算法设计策略,要求分解所得的子问题是同类问题,并要求原问题的解可以通过组合子问题的解来获取。
分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效的算法。
2. 分治法的基本步骤
divide-and-conquer(P)
{
if ( | P | <= n0) adhoc(P); //解决小规模的问题
divide P into smaller subinstances P1,P2,...,Pk;
//分解问题
for (i=1,i<=k,i++)
yi=divide-and-conquer(Pi); //递归的解各子问题
return merge(y1,...,yk); //将各子问题的解合并为原问题的解
}
3. C++类定义例
class Complex
{
public:
Complex( ):real(0),imag(0) {} //构造函数
Complex(double r,double i):real(r),imag(i) {} //构造函数
Complex operator + (Complex c2); //重载“+”运算符
operator double( ) //重载类型转换运算符
{
return real;
}
friend ostream& operator << (ostream&,Complex&); //重载流插入运算符“<<”private:
double real;
double imag;
};
三、实验内容及要求:
在程序中创建一个学生对象数组并初始化数据,完成如下编程任务。
⑴找出成绩排名第4的学生,输出其姓名。
要求:
①编写功能较为完善的学生类,重载必要的运算符;
②使用快速排序的方法。
⑵使用分治法找出成绩最高和成绩最低的学生,输出他们的姓名。四、实验报告要求
①实验报告只写实验⑵。
②写出算法思想、主要程序代码、算法复杂性分析。