算法设计与分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析实验报告
指导老师:沙莎
学院:信息科学与工程学院
班级:计科0508
姓名:戚婕
学号:10
完成日期:2007年12月
目录
实验一分治法 (2)
实验要求 (2)
实验内容 (2)
核心算法 (2)
程序代码 (4)
实验结果 (8)
实验二贪心法 (10)
实验要求 (10)
实验内容 (10)
核心算法 (10)
程序代码 (12)
实验结果 (18)
实验三动态规划 (20)
实验要求 (20)
实验内容 (20)
核心算法 (20)
程序代码 (21)
实验结果 (24)
实验四深度优先搜索 (26)
实验要求 (26)
实验内容 (26)
核心算法 (26)
程序代码 (27)
实验结果 (28)
实验五回溯法 (30)
实验要求 (30)
实验内容 (30)
核心算法 (30)
程序代码 (31)
实验结果 (33)
实验一分治法
一.实验要求
了解用分治法求解的问题:当要求解一个输入规模为n,且n的取值相当大的问题时,
如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1 掌握分治法的一般控制流程。 DanC(p,q) global n,A[1:n]; integer m,p,q; 验内容 编程实现归并排序算法和快速排序算法,程序中加入比较次数的计数功能,输出排序结果和比较次数。 输入10组相同的数据,验证排序结果和完成排序的比较次数。 与复杂性函数所计算的比较次数比较。 用表格列出比较结果。 给出文字分析。 三.程序算法 1. 归并排序算法 procedure MERGESORT(low,high) 快速排序算法 QuickSort(p,q) 序代码 归并排序 #include<> #include<> #include<> #include<> #define M 11 typedef int KeyType; typedef int ElemType; struct rec{ KeyType key; ElemType data; }; typedef rec sqlist[M]; class guibing{ public: guibing(sqlist b) { for(int i=0;i r[i]=b[i]; } void output(sqlist r,int n) { for(int i=0;i cout< cout< } void xuanze(sqlist b,int m,int n) { int i,j,k; for(i=m;i { k=i; for(j=i;j if(b[k].key>b[j].key) k=j; if(k!=i) { rec temp=b[k]; b[k]=b[i]; b[i]=temp; } } } void merge(int l,int m,int h,sqlist r2) { xuanze(r,l,m); xuanze(r,m,h); output(r,M); int i,j,k; k=i=l; for(j=m;i { if(r[i].key<=r[j].key) { r2[k]=r[i]; i++; } else { r2[k]=r[j]; j++; } output(r2,M); } while(j { r2[k]=r[j]; j++; k++; } while(i<=m) { r2[k]=r[i]; i++; k++; } output(r2,M); } private: sqlist r; }; void main() { cout<<"guibingfa1运行结果:\n"; sqlist a,b; int i,j=0,k=M/2,n=M; srand(time(0)); for(i=0;i { a[i].key=rand()%80;b[i].key=0; } guibing gx(a); cout<<"排序前数组:\n"; (a,M); cout<<"数组排序过程演示:\n"; (j,k,n,b); cout<<"排序后数组:\n"; (b,M); (); } 快速排序 #include<> #include<> #include<>