- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法导论
上机报告
班级: 1313012
学号:
姓名: 黄帮振
实验编号1题目1归并排序算法实验内容描述一个运行时间为θ(nlgn)的算法给定n个整数的集合S和另一个整数x该算法能确定S中是否存在两个其和刚好为x的元素。实验目的用分治思想,设计子问题,实现归并排序算法;报 告 正 文一、算法分析
1、运用归并排序算法
归并排序运用的是分治思想,时间复杂度为θ(nlgn)能够满足题目要求的运行时间。归并排序的分解部分是每次将数组划分两个部分,时间复杂度为θ(1)再对已经分解的两个部分再进行分解直到将数组分解成单个元素为止。解决部分是递归求解排序子序列,合并部分是将已经排序的子序列进行合并得到所要的答案,时间复杂度为θ(lgn)。
在已经排好序的基础上,对其运用二分查找
二分查找算法的时间复杂度为θ(lgn)在题目要求的范围内,二分查找的条件为待查的数组为有序序列。算法的主要思想为设定两个数low指向最低元素high指向最高元素,然后比较数组中间的元素与待查元素进行比较。如果待查元素小于中间元素,那么表明查找元素在数组的前半段,反之,如果待查元素大于中间元素,那么表明查找元素在数组的后半段。
二、伪代码:
MERGE(A,p,q,r)
n1=q-p+1
n2=r-q
Let L[1..n1+1]andR[1..n2+1]be new arrays
For i=1 to n1
L[i]=A[p+i-1]
For j=1 to n2
R[j]=A[q+j]
L[n1+1]=无穷
R[n2+1]=无穷
I=1
J=1
For k=p to r
If L[i]=R[j]
A[k]=L[i]
I=i+1
Else A[k]=R[j]
J=j+1
MERGE-SORT(A,p,r)
if pr
q=(p+r)/2(取下限)
MERGE-SORT(A,p,q)
MERGE-SORT(A,q+1,r)
MERGE(A,p,q,r)
实验总结
在主函数中调用二分查找的时候,参数应该为BinSearch(a,j+1,n,x-a[j])从j+1开始遍历而不是都是从第一个开始。在程序中由于程序语言规定数组的下标从0开始而算法伪代码要求从1开始,因此在定义数组大小的时候将数字加1,但是在编译运行的时候会得不到想要的结果,出现数组下标访问错误。
实验编号1题目2优先队列排序实验内容实现优先队列排序算法,需要支持以下操作:
INSERT(S,x):把元素x插入到集合S中
MAXMUM(S):返回S中具有最大key的元素
EXTRACT-MAX(S):去掉并返回S中的具有最大key的元素
INCREASE-KEY(S,x,k):将元素x的关键字值增到k。 实验目的堆排序,运用堆来实现优先队列。报 告 正 文算法原理
1、堆排序算法是引用堆这个数据结构进行信息管理。堆排序的时间复杂度是θ(nlgn),但是与归并排序不同的是堆排序具有空间的原址性,任何时候都只需要常数个额外的元素空间存储临时数据。堆排序算法分为3个过程MAX-HEAPIEY:调整堆以满足小顶堆性质 其时间复杂度为θ(lgn);BUILD-MAXHEAP:从无序的输入数据数组中构造小顶堆,其时间复杂度为线性时间;HEAP-SORT:对数组进行原址排序,其时间复杂度为θ(nlgn)。
2、在堆的基础上实现优先队列INSERT、MAXMUM、EXTRACT-MAX、INCREASE-KEY时间复杂度为θ(lgn)。
伪代码
BUILD-MAX-HEAP(A)
A.heap-size=A.length
For i=A.length/2(取下限) downto 1
MAX-HEAPIFY(A,i)
HEAPSORT(A)
Build-MAX-HEAP(A)
For i=A.length downto 2
Exchange A[1] with A[i]
A.heap-size=A.heap-size - 1
MAX-HEAPIFY(A,1)
HEAP-MAIMUM(A)
return A[1]
HEAP-EXTRACT-MAX(A)
if A.heap-size1
Error “heap underflow”
Max=A[1]
A[1]=A[A.heap-size]
A.heap-size=A.
文档评论(0)