算法设计与分析实验报告.docx
- 文档编号:856966
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:37
- 大小:116.31KB
算法设计与分析实验报告.docx
《算法设计与分析实验报告.docx》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告.docx(37页珍藏版)》请在冰豆网上搜索。
算法设计与分析实验报告
算法设计与分析实验报告
指导老师:
沙莎
学院:
信息科学与工程学院
班级:
计科0508
姓名:
戚婕
学号:
10
完成日期:
2007年12月
实验一分治法…………………………………………………………………………2
1.1实验要求………………………………………………………………………2
1.2实验容………………………………………………………………………2
1.3核心算法………………………………………………………………………2
1.4程序代码………………………………………………………………………4
1.5实验结果………………………………………………………………………8
实验二贪心法………………………………………………………………………10
2.1实验要求……………………………………………………………………10
2.2实验容……………………………………………………………………10
2.3核心算法……………………………………………………………………10
2.4程序代码……………………………………………………………………12
2.5实验结果……………………………………………………………………18
实验三动态规划…………………………………………………………………20
3.1实验要求……………………………………………………………………20
3.2实验容……………………………………………………………………20
3.3核心算法……………………………………………………………………20
3.4程序代码……………………………………………………………………21
3.5实验结果……………………………………………………………………24
实验四深度优先搜索……………………………………………………………26
4.1实验要求……………………………………………………………………26
4.2实验容……………………………………………………………………26
4.3核心算法……………………………………………………………………26
4.4程序代码……………………………………………………………………27
4.5实验结果……………………………………………………………………28
实验五回溯法………………………………………………………………………30
5.1实验要求……………………………………………………………………30
5.2实验容……………………………………………………………………30
5.3核心算法……………………………………………………………………30
5.4程序代码……………………………………………………………………31
5.5实验结果……………………………………………………………………33
实验一分治法
一.实验要求
1.了解用分治法求解的问题:
当要求解一个输入规模为n,且n的取值相当大的问题时,
如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1 那末,对于这类问题分治法是十分有效的。 2.掌握分治法的一般控制流程。 DanC(p,q) globaln,A[1: n];integerm,p,q;//1£p£q£n ifSmall(p,q)thenreturnG(p,q); elsem=Divide(p,q);//p£m returnCombine(DanC(p,m),DanC(m+1,q)); endif endDanC 3.实现典型的分治算法的编程与上机实验,验证算法的时间复杂性函数。 二.实验容 1.编程实现归并排序算法和快速排序算法,程序中加入比较次数的计数功能,输出排序结果和比较次数。 2.输入10组相同的数据,验证排序结果和完成排序的比较次数。 3.与复杂性函数所计算的比较次数比较。 4.用表格列出比较结果。 5.给出文字分析。 三.程序算法 1.归并排序算法 procedureMERGESORT(low,high) //A(low;high)是一个全程数组,它含 有high-low+1≥0个待排序的元素// integerlow,high; iflow thenmid←,//求这个集合的分割点// callMERGESORT(low,mid)//将一个子集合排序// callMERGESORT(mid+1,high)//将另一个子集合排序 callMERGE(low,mid,high)//归并两个已排序的子集合// endif endMERGESORT 归并两个已排序的集合 procedureMERGE(low,mid,high) //A(low: high)是一个全程数组// //辅助数组B(low;high)// integerh,i,j,k; h←low;i←low;j←mid+1; whileh≤midandj≤highdo//当两个集合都没取尽时// ifA(h)≤A(j)thenB(i)←A(h);h←h+1 elseB(i)←A(j);j←j+1 endif i←i+1 repeat ifh>midthen fork←jtohighdo//处理剩余的元素// B(i)←A(k);i←i+1 repeat elsefork←htomiddo B(i)←A(k);i←i+1 repeat endif 将已归并的集合复制到A endMERGE 2.快速排序算法 QuickSort(p,q) //将数组A[1: n]中的元素 A[p],A[p+1],¼,A[q]按不降次序排列, 并假定A[n+1]是一个确定的、且大于 A[1: n]中所有的数。 // intp,q;globaln,A[1: n]; ifp j=Partition(p,q+1);//划分后j成为划分元素的位置 QuickSort(p,j-1); QuickSort(j+1,q); endif endQuickSort procedurePARTITION(m,p) //退出过程时,p带着划分元素所在的下标位置。 // integerm,p,i;globalA(m: p-1) v←A(m);i←m//A(m)是划分元素// loop loopi←i+1untilA(i)≥vrepeat//i由左向右移// loopp←p-1untilA(p)≤vrepeat//p由右向左移// ifi thencallINTERCHANGE(A(i),A(p))//A(i)和A(p)换位// elseexit endif repeat A(m)←A(p);A(p)←v//划分元素在位置p// EndPARTITION 四.程序代码 1.归并排序 #include #include #include #include #defineM11 typedefintKeyType; typedefintElemType; structrec{ KeyTypekey; ElemTypedata; }; typedefrecsqlist[M]; classguibing{ public: guibing(sqlistb) { for(inti=0;i r[i]=b[i]; } voidoutput(sqlistr,intn) { for(inti=0;i cout< cout< } voidxuanze(sqlistb,intm,intn) { inti,j,k; for(i=m;i { k=i; for(j=i;j if(b[k].key>b[j].key)k=j; if(k! =i) { rectemp=b[k]; b[k]=b[i]; b[i]=temp; } } } voidmerge(intl,intm,inth,sqlistr2) { xuanze(r,l,m); xuanze(r,m,h); output(r,M); inti,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: sqlistr; }; voidmain() { cout<<"guibingfa1运行结果: \n"; sqlista,b; inti,j=0,k=M/2,n=M; srand(time(0)); for(i=0;i { a[i].key=rand()%80;b[i].key=0; } guibinggx(a); cout<<"排序前数组: \n"; gx.output(a,M); cout<<"数组排序过程演示: \n"; gx.merge(j,k,n,b); cout<<"排序后数组: \n"; gx.output(b,M); cin.get(); } 2.快速排序 #include #include #include #include #defineMAXI10 typedefintKeyType; typedefintElemType; structrec{ KeyTypekey; ElemTypedata; }; typedefrecsqlist[MAXI]; classkuaisu { public: kuaisu(sqlista,intm): n(m)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)