算法实验报告分治法性能分析.docx
- 文档编号:23978139
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:18
- 大小:111.60KB
算法实验报告分治法性能分析.docx
《算法实验报告分治法性能分析.docx》由会员分享,可在线阅读,更多相关《算法实验报告分治法性能分析.docx(18页珍藏版)》请在冰豆网上搜索。
算法实验报告分治法性能分析
分治法算法分析作业
吴迪
2011-3-29
本次是第一次算法作业,该部分内容包含3个题目的程序代码,分析文档,说明图片等内容
引言
任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。
问题的规模越小,越容易直接求解,解题所需的计算时间也越少。
分治法是计算机科学中经常使用的一种算法。
设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
但是不是所有问题都适合用分治法解决。
当求解一个输入规模为n且取值又相当大的问题时,使用蛮力策略效率一般得不到保证。
因此分治策略将问题划分成k个子问题分别求解合并能有效提高计算效率。
1算法性能比较
1.1问题分析
比较插入排序,合并排序和快速排序性能。
算法性能比较通常是从时间复杂度的角度进行的。
排序算法的复杂度主要和算法中的比较次数和元素交换或移动次数有关。
因而在不同大小规模的问题中通过统计这两者之和来评判算法的优劣。
同时也可以证明各种算法的时间复杂度与问题规模n之间的关系。
特别说明:
本程序中考虑到不同规模的乱序数据输入过程比较复杂,编写了一个规模n的整型数据随机排列函数,能够直接生成指定大小的1-n无序整数列。
1.2源程序代码
//2011年3月19日0:
20:
02
//maintest.cppfortest
#include
#include
usingnamespacestd;
//全局标记比较次数和移动次数
intcount_compare=0;
intcount_move=0;
intcount_all(){
returncount_compare+count_move;
}
voidclear_count()
{
count_compare=0;
count_move=0;
}
//insertsort
voidinsert_element(inta[],intsize,intelement)//sizebeforeinsertion
{
inti=0;
for(i=size-1;i>=0;i--)
{
count_compare++;
if(element elsebreak; } a[i+1]=element; count_move++; } voidInsertSort(inta[],intsize) { for(inti=1;i { insert_element(a,i,a[i]); } } //mergesort voidMerge(intc[],intd[],intl,intm,intr) { inti=l,j=m+1,k=l; while(i<=m&&j<=r) { count_compare++; if(c[i]<=c[j]){ d[k++]=c[i++]; count_move++; } else{d[k++]=c[j++];count_move++;} } count_compare++; if(i>m) { for(intq=j;q<=r;q++){ d[k++]=c[q]; count_move++; } } else for(intq=i;q<=m;q++){ d[k++]=c[q]; count_move++; } } voidCopy(inta[],intb[],intl,intr) { for(inti=l;i<=r;i++){ a[i]=b[i]; count_move++; } } voidMergeSort(inta[],intleft,intright,intsize) { if(left { count_compare++; inti=(right+left)/2; intp=size;//thisisimportant,mindthevalue! int*b=newint[p]; MergeSort(a,left,i,size); MergeSort(a,i+1,right,size); Merge(a,b,left,i,right); Copy(a,b,left,right); } } //quicksort voidswap(inta[],inti,intj) { inttemp=a[i]; a[i]=a[j]; a[j]=temp; count_move+=3; } intpartition(inta[],intp,intr) { inti=p,j=r+1; intx=a[p]; while(true) { while(a[++i] while(a[--j]>x)count_compare++; count_compare++; if(i>=j)break; swap(a,i,j); } a[p]=a[j]; a[j]=x; count_move++; returnj; } voidQuickSort(inta[],intp,intr) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 实验 报告 分治 性能 分析