减治法解决堆排序.doc_第1页
减治法解决堆排序.doc_第2页
减治法解决堆排序.doc_第3页
减治法解决堆排序.doc_第4页
减治法解决堆排序.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算法分析实验报告减治法 - 堆排序学生姓名:专业:班级:学号 :指导教师:2017年6月12日目录一、实验题目2二、实验目的2三、实验要求2四、实现过程31、实验设计:32、调试分析:63、运行结果:错误 !未定义书签。4、实验总结:7五、参考文献7一、实验题目减治法 - 堆排序二、实验目的1、了解和掌握减治法的设计思想。2、了解各种经典问题的减治思想。三、实验要求1. 问题描述 :应用堆排序方法对一个记录序列进行升序排列。2. 算法 :减治法 : 减治法是把一个大问题划分为若干个子问题, 但是这些子问题不需要分别求解, 只需求解其中的一个子问题, 因而也无需对子问题的解进行合并。减治法将原问

2、题分解为若干个子问题,并且原问题(规模为 n)的解与子问题(规模通常是 n/2 或 n-1 )的解之间存在某种确定的关系,这种关系通常表现为:(1)原问题的解只存在于其中一个较小规模的子问题中;(2)原问题的解与其中一个较小规模的解之间存在某种对应关系。由于原问题的解与较小规模的子问题的解之间存在这种关系,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。减治法只对一个子问题求解,并且不需要进行解的合并。 应用减治法(例如减半法)得到的算法通常具有如下递推式:T(n)=0 ;n=1T(n/2)+1;n1分治法需要对分解的子问题分别求解,再对子问题的解进行合并,而减治法只对一个子问题进

3、行求解,并且不需要进行解的合并。所以,通常来说,应用减治法处理问题的效率是很高的, 一般是 O(logn)数量级。四、实现过程1、实验设计:1. 堆排序是利用堆得特性进行排序的方法, 其基本思想是: 首先将待排列的记录序列构造成一个堆, 此时,堆顶记录是堆中所有记录的最大者,将它从堆中移走,然后将剩余记录再调整成堆,这样又找出了次大记录,依次类推,直到堆中只有一个记录为止。2. 图解过程4735262018713104735262018713107101318352647207101318352647203. 算法实现void SiftHeap(int r,int k,int n)int i,

4、j,temp;i=k;j=2*i+1;while(jn)if(jn-1&rjrj)break;elsetemp=ri;ri=rj;rj=temp;i=j;j=2*i+1;void HeapSort(int r,int n)int i,temp;for(i=(n-1)/2;i=0;i-)SiftHeap(r,i,n);for(i=1;i=n-1;i+)temp=r0;r0=rn-i;rn-i=temp;SiftHeap(r,0,n-i);2、调试分析:算法 Sift 将根结点与左右子树的根结点进行比较,若不满足堆的条件,则将根结点与左右子树根结点的较大者进行交换,所以,每比较一次,需要调整的完全二叉树的问题规模就减少一半,因此,其时间性能是 O( ?n)。3、运行结果:4、实验总结:通过本次实验加深了我对减治法的理解,同时对用、减治法解决一个实际问题有了一个更深层次的认识。通过本次实验使我掌握了减治法递归的一般模式, 以后在解决一类问题时可以照着这个模式编写程序。通过本次试验,自己基本上掌握上述算法原理,达到实验的目的。五、参考文献1 王红梅 胡胡算法设计与分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论