博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法第二章上机实践报告
阅读量:6042 次
发布时间:2019-06-20

本文共 1474 字,大约阅读时间需要 4 分钟。

1.实践题目:两个有序序列的中位数

2.问题描述:

        输入一个n(0<n<=100000),代表两个等长有序序列的长度,随后两行分别输入两个非降序序列,求出两个序列的合并后的中位数,中位数为合并后的有序序列中的第(n+1)/2个数,下标从0开始。

3.算法描述:

  本题可采用多种方法求解,最初我们选用的算法时间复杂度为O(n),之后在老师的要求下,运用第二章所学知识(即分治法)进行改进,改进后时间复杂度为O(logN)。

  若采用分治法的思想,则是在不断缩小问题的规模,最终合并子问题求解。

  具体过程如下:

  每次分别求取每个序列的中位数,并比较中位数的大小,中位数较大的序列截取比该中位数小的一则的序列作为新的序列,中位数较小的序列截取比该中位数大的一侧的序列作为新的序列(两段序列需等长),比较新得到的两个序列的中位数,不断递归截取直到序列的规模足够小(本题取两个序列的长度分别为2时停止递归,特殊情况序列长度为1,单独进行讨论),对剩余的序列进行简单的排序操作后可得到最终答案,需要注意的是递归过程中应保持序列长度一致。

递归算法代码如下:

int findMid(int a[],int b[],int la,int ra,int lb,int rb){    int mida=(la+ra)/2;    int midb=(lb+rb)/2;        if(ra-la==0) {        if(a[la]
midb-lb)//调整子序列长度 return findMid(a,b,mida,ra,lb,midb+1);//调整子序列长度,使得两段序列等长 else return findMid(a,b,mida,ra,lb,midb); } if(a[mida]>b[midb] ){ if(mida-la

4.算法分析:

  时间复杂度:该算法在每步将问题分成规模为N/2的1个子问题,由求规模为N的两个有序序列的中位数转变为求规模为N/2的两个有序序列的中位数。在划分操作时,直接取下标进行划分,复杂度为O(1);在合并子问题时,只需对4个数进行简单的排序,时间复杂度可看做O(1),主定理求解后,最终得出算法的时间复杂度为O(logn)。

  空间复杂度:因存储数组需要存储空间,规模为O(n),而排序时为了方便使用一个辅助数组,规模为O(1),最终得出空间复杂度为O (n)。

 

5.心得体会:

  此次合作是我和搭档的第二次合作,比较遗憾的是他在实验上机前就已经完成提交了代码,但我们还是一起交流了彼此的意见,对代码进行了改进。此题是改进幅度最大的一道,算是重新编写了代码(因为最初用的算法时间复杂度为O(N),在老师的要求下改进为O(logN)),但遗憾的是未能在上机时间内将其完善。我们改进的思路是对的,但由于一些小疏忽(最致命的小错误就是调用递归算法时忘记在前面加上return,导致我们进度滞塞,挠头踌躇,可能是因为我们两人太过急切于完成题目),还有一个错误是编完代码后发现只能处理大部分问题,后来发现是没有注意调整子序列的长度,导致截取序列的时候出现错误,两段序列不等长。按照我搭档的话来说就是感觉还是对分治法的使用不够熟练,没能够调整好子问题规模的大小。

 

转载于:https://www.cnblogs.com/Lumasaevial/p/9827129.html

你可能感兴趣的文章
[编解码] 关于base64编码的原理及实现
查看>>
WinDbg配置和使用基础
查看>>
转:Object-Runtime的基本数据类型
查看>>
JMJS系统总结系列----Jquery分页扩展库(五)
查看>>
Excel技巧之——英文大小写转换(转)
查看>>
Google 翻译的妙用
查看>>
常用的集合
查看>>
Unity3D工程源码目录
查看>>
杀死进程命令
查看>>
cookie 和session 的区别详解
查看>>
Mongodb对集合(表)和数据的CRUD操作
查看>>
Target runtime Apache Tomcat is not defined.错误解决方法
查看>>
VC++ 监视文件(夹)
查看>>
【转】keyCode对照表及JS监听组合按键
查看>>
[Java开发之路](14)反射机制
查看>>
mac gentoo-prefix安装git svn
查看>>
浅尝异步IO
查看>>
C - Train Problem II——(HDU 1023 Catalan 数)
查看>>
Speak loudly
查看>>
iOS-在项目中引入RSA算法
查看>>