2n个数的中位数问题_python_算法与数据结构
时间:2011-03-16 来源:追求卓越 挑战极限
问题 :
对于两个长度均为n的已排序的序列,确定这两个序列的2n个元素的中位数。
解决此问题的算法思想:
设两个长度为n的数列分别为x[ 0 : n -1]和y[ 0 : n -1],分别找出这两个数列的中位数x[i]和
y[ j ],二者进行比较,根据比较结果可以在每个数列中减少一半的搜索范围,然后再分别取
两个子数列的中位数再比较,再减少搜索范围,继续下去直到找到最后结果。采用分治法来做,时间复杂度:O(lgn).
网址:中位数问题 对这个问题进行了较为深入的阐述。下面给出了Python的代码实现:
def fidMid(cx1,cx2): size = len(cx1) midSize = size //2 if (size ==1 ): if(cx1[0] >=cx2[0]): return cx2[0] else: return cx1[0] if(cx1[midSize] <=cx2[midSize]): for i in range(0, midSize): cx1.pop(0) cx2.pop() else: for i in range(0, midSize): cx2.pop(0) cx1.pop() return fidMid(cx1, cx2) if '__name__ = __main__' : x=[10, 15, 16, 19, 24] y=[11, 17, 18, 20, 23] print(fidMid(x, y))
相关阅读 更多 +