算法设计与分析实验指导1_分治与递归

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的学生,输出其姓名。

要求:

①编写功能较为完善的学生类,重载必要的运算符;

②使用快速排序的方法。

⑵使用分治法找出成绩最高和成绩最低的学生,输出他们的姓名。四、实验报告要求

①实验报告只写实验⑵。

②写出算法思想、主要程序代码、算法复杂性分析。

相关文档
最新文档