算法导论上机报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法导论
上机报告
班级: 1313012
学号:
姓名: 黄帮振
描述一个运行时间为θ(nlgn)的算法给定n个整数的集合S与另一个整数x
该算法能确定S中就是否存在两个其与刚好为x的元素。
一、算法分析
1、运用归并排序算法
归并排序运用的就是分治思想,时间复杂度为θ(nlgn)能够满足题目要求的运行时间。归并排序的分解部分就是每次将数组划分两个部分,时间复杂度为θ(1)再对已经分解的两个部分再进行分解直到将数组分解成单个元素为止。解决部分就是递归求解排序子序列,合并部分就是将已经排序的子序列进行合并得到所要的答案,时间复杂度为θ(lgn)。
2、在已经排好序的基础上,对其运用二分查找
二分查找算法的时间复杂度为θ(lgn)在题目要求的范围内,二分查找的条件为待查的数组为有序序列。算法的主要思想为设定两个数low指向最低元素high指向最高元素,然后比较数组中间的元素与待查元素进行比较。如果待查元素小于中间元素,那么表明查找元素在数组的前半段,反之,如果待查元素大于中间元素,那么表明查找元素在
实现优先队列排序算法,需要支持以下操作:
INSERT(S,x):把元素x插入到集合S中
MAXMUM(S):返回S中具有最大key的元素
EXTRACT-MAX(S):去掉并返回S中的具有最大key的元素INCREASE-KEY(S,x,k):将元素x的关键字值增到k。
一、算法原理
快速排序采用分治策略,时间复杂度为θ(nlgn),但就是最坏情况下为θ(n2),并且快速排序算法属于原地排序,并不需要开辟空间。快速排序复杂的步骤为其分解的步骤
分解的过程数组A[p、、r]被划分为两个子数组A[p、、q-1]与A[q+1、、r],使得A[p、、q-1]中的每个元素都小于A[q],而A[q]也小于等于A[q+1、、r]中的每个元素。而在实现的过程总就是选择将A[r]作为基准点进行划分A[p、、r]数组。
二、伪代码
QUICKSORT(A,p,r)
1 if p < r
2 q = PARTITION(A,p,q)
3 QUICKSORT(A,p,q-1)
4 QUICKSORT(A,q+1,r)
PARTITION(A,p,r)
1 x = A[r]
2 i = p-1
3 for j = p to r-1
4 if A[j] x
5 i = i+1
6 exchange A[i] with A[j]
7 exchange A[i+1] with A[r]
8 return i + 1
三、实验总结
问题答案:当选取第一个或者最后一个为基准点时,当n个元素相同的时候为最坏情况比较次数为n*(n-1)/2;快速排序比较次数最少为θ(nlgn),,最大的比较次数为θ(n2)。
运用分治的策略将两个已经排好序的序列中,找出第k大的元素且要求时间复杂度为θ(lgm+lgn),其中m与n分别为两个序列的长度。
一、算法原理
1最优子结构为:如果最优的加括号的方式将其分解为Ai、、k与Ak+1、、j的乘积则分别对Ai、、k与Ak+1、、j加括号的方式也一定就是最优的。
2定义m[i,j]为计算矩阵Ai、、j所需标量乘法次数的最小值,对于i=j时,矩阵链乘只包含唯一的矩阵Ai,因此不需要做任何标量乘法运算,所以m[i,i]=0;当i 3矩阵链乘的递归式 4在算法设计的时候需要m数组记录Ai、、j最小相乘次数,s数组记录构造最优解所需要的信息,其记录的k值指出了AiAi+1Aj的最优括号化方案的分割点应在AkAk+1之间。 5 矩阵链乘的时间复杂度为θ(n3) 二、伪代码 MATRIX-CHAIN-ORDER(p) 1、n=p、length-1 2、Let m[1、、n,1、、n] and s[1、、n-1,2、、n] be new tables 3、For i=1 to n 4、 M[i,i]=0 5、for l=2 to n 6、 For i=1 to n-l+1 7、 J=i+l-1 8、 M[i,j]=无穷 9、 For k=i to j-1 10、 Q=m[i,k]+m[k+1,j]+p(i-1)*p(k)*p(j) 11、 If q 12、 M[i,j]=q 13、 S[i,j]=k 一、算法原理 1最优子结构:令X= Z= 2定义一个b[i,j]指向表项对应计算c[i,j]时所选择的子问题最优解,过程返回表b与表c,c[m,n]保持X与Y的LCS长度。 3LCS的递归式为 4LCS的时间复杂度为θ(m+n),b表的空间复杂度为θ(mn)。 二、伪代码 LCS-LENGTH(X,Y) 1.m=X、length 2.n=Y、length 3.Let b[1、、m,1、、n] and c[0、、m,0、、n] be new tables 4.For i=1 to m 5. c[i,0]=0 6.For j=0 to n 7. c[0,j]=0 8.For i=1 to m 9. For j=1 to n