对于求两个有序序列a[],b[]的中位数,首先考虑到二路归并后求其中位数c[m](m=(s+t)/2,s为序列左侧编号,t为序列右侧编号,对于偶数位中位数,只考虑下中位),但时间复杂度为O(n),效率比较低,因此这里考虑采用分治法。当两个有序序列元素个数只有一个时,返回较小的那一个;当元素个数不止一个时,分为以下三种情况:
(1)a[m1]与b[m1]相等,a[m1]或b[m1]就是中位数,因为合并后a[m1]和b[m1]必定在中间位置。
(2)a[m1]>b[m1],此时考虑
大的舍大的,小的舍小的。即元素大的序列舍弃后半子序列,保留前半子序列;元素小的序列舍弃前半子序列,保留厚板子序列(
要求舍弃的长度相等)。
(3)a[m1]>b[m1],同(2)。
在求解过程中,保留前半子序列prepart可以直接t=m;但保留后半子序列postpart时,需要考虑到奇偶位数问题,当元素个数为奇数(s+t)%2==0个时,直接t=m(这样舍弃的位数才相等),当元素个数为偶数(s+t)%2!=0个时,
t=m+1(因为偶数个元素时,考虑的是下中位,因此为使舍弃的位数相等,下中位就不能要)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。