网站大量收购独家精品文档,联系QQ:2885784924

分治法性能分析--张富生.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分治法性能分析--张富生

计算机与信息学院2015-2016-2课程论文 《 最优化方法及其应用 》课程类型:学科基础学位课学号:2015110406003姓名:张富生专业:软件工程授课教师:田卫新完成日期:2016 年7月11日引言: 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。分治法是计算机科学中经常使用的一种算法。设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。但是不是所有问题都适合用分治法解决。当求解一个输入规模为n且取值又相当大的问题时,使用蛮力策略效率一般得不到保证。因此分治策略将问题划分成k个子问题分别求解合并能有效提高计算效率。1算法性能比较1.1问题分析比较插入排序,合并排序和快速排序性能。算法性能比较通常是从时间复杂度的角度进行的。排序算法的复杂度主要和算法中的比较次数和元素交换或移动次数有关。因而在不同大小规模的问题中通过统计这两者之和来评判算法的优劣。同时也可以证明各种算法的时间复杂度与问题规模n之间的关系。1.2源程序代码//main test.cpp for test#includeiostream#includetime.husing namespace std; //全局标记比较次数和移动次数 int count_compare=0;int count_move = 0;int count_all(){ return count_compare+count_move;} void clear_count(){ count_compare=0; count_move = 0;} //insert sort void insert_element(int a[],int size,int element) //size before insertion{ int i=0; for(i=size-1;i=0;i--) { count_compare++; if(elementa[i]){ a[i+1]=a[i];count_move++;} else break; } a[i+1]=element; count_move++;}void InsertSort(int a[],int size){ for(int i=1;isize;i++) { insert_element(a,i,a[i]); }} //merge sortvoid Merge(int c[],int d[], int l, int m, int r){ int i = 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(int q = j; q = r; q ++){ d[k++] = c[q]; count_move++; } } else for(int q = i; q = m; q ++){ d[k++] = c[q]; count_move++; }}void Copy(int a[],int b[],int l,int r){for(int i=l;i=r;i++){ a[i]=b[i]; count_move++; }}void MergeSort(int a[],int left,int right,int size){ if(left right) { count_compare++; int i = (right + left)/2; int p=size; //this is important,mind the value! int *b=new int[p]; MergeSort(a, left, i,size); MergeSort(a, i+1, right,size); Merge(a, b, left, i, right); Copy(a,b,left,right); }}//quick sortvoid swap(int a[],int i,int j){ int temp=a[i]; a[i]=a[j]; a[j]=temp; count_move+=3;}int partition(int a[],int p,int r){ int i=p,j=r+1; int x=a[p]; while(true) { while(a[++i]xir) count_compare++; while(a[--j]x

文档评论(0)

didala + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档