有序数组求中位数问题

有序数组求中位数问题

ID:6594137

大小:47.00 KB

页数:5页

时间:2018-01-19

有序数组求中位数问题_第1页
有序数组求中位数问题_第2页
有序数组求中位数问题_第3页
有序数组求中位数问题_第4页
有序数组求中位数问题_第5页
资源描述:

《有序数组求中位数问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、1、有两个已排好序的数组A和B,长度均为n,找出这两个数组合并后的中间元素,要求时间代价为O(logn)。2、假设两个有序数组长度不等,同样的求出中位数。一:解析:这个题目看起来非常简单。第一题的话:假设数组长度为n,那么我就把数组1和数组2直接合并,然后再直接找到中间元素。对于这样的方案,第一题和第一题就没有什么区别了。这样的话时间复杂度就是O(n)。通常在这样的情况下,那些要求比较高的面试官就会循循善诱道:“你还有更好的办法吗?”如果比线性更高效,直接能想到的就是对数了O(log(n)),这个时间复杂度在这里可能吗?当然还是可能的。算法导论上面的分析是这样的:Saythe

2、twoarraysaresortedandincreasing,namelyAandB.ItiseasytofindthemedianofeacharrayinO(1)time.AssumethemedianofarrayAismandthemedianofarrayBisn.Then,1、Ifm==n,thenclearlythemedianaftermergingisalsom,thealgorithmholds.2、Ifm<=n,thenreservethehalfofsequenceAinwhichallnumbersaregreaterthanm,alsoreser

3、vethehalfofsequenceBinwhichallnumbersaresmallerthann.Runthealgorithmonthetwonewarrays。3、Ifm>n,thenreservethehalfofsequenceAinwhichallnumbersaresmallerthanm,alsoreservethehalfofsequenceBinwhichallnumbersarelargerthann.Runthealgorithmonthetwonewarrays。Timecomplexity:O(logn)下面,我们来画个图,分析一下这个思路:

4、我们先来分析看看:想到对数的效率,首先想到的就是二分查找,对于这个题目二分查找的意义在哪里呢?我们找到了A[n/2]和B[n/2]来比较,1、如果他们相等,那样的话,我们的搜索结束了,因为答案已经找到了A[n/2]就肯定是排序后的中位数了。2、如果我们发现B[n/2]>A[n/2],说明什么,这个数字应该在A[n/2]->A[n]这个序列里面,或者在B[1]-B[n/4]这里面。或者,这里的或者是很重要的,我们可以说,我们已经成功的把问题变成了在排序完成的数组A[n/2]-A[n]和B[0]-B[n/2]里面找到合并以后的中位数,显然递归是个不错的选择了。3、如果B[n/2]

5、b[0]?b[0]:a[0];}intmid=(length-1)/2;//奇数就取中间的,偶数则去坐标

6、小的if(a[mid]==b[mid])returna[mid];elseif(a[mid]

7、Equal_Length(a,b+length-mid-1,mid+1);}}非递归代码如下://非递归代码intFind_Media_Equal_Length(inta[],intb[],intlength){intmid;while(1){if(length==1){returna[0]>b[0]?b[0]:a[0];}mid=(length-1)/2;if(a[mid]==b[mid])returna[mid];elseif(a[mid]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。