【算法复习三】算法设计技巧与优化----算法设计技巧之中位数
题目:设计一个高效算法,求两个等长为L的升序序列A和B 的中位数。
例如:S1=(11,13,15,17,19)
S2=(2,4,6,8,20)
则S1和S2的中位数是11。
1)问题分析1:
简单的算法是将两个升序序列归并排序,然后求其中位数
算法的时间复杂度和空间复杂度均为0(n)
2)问题分析2:
利用归并排序的思想对A和B的元素逐个访问,同时计数,当访问到第L个元素时即为所求。
算法时间、空间复杂度分别为O(n), O(1)
3)问题分析3:
分别求A和B的中位数a和b。
(1)若a=b,则a或b即为所求。
(2)若a<b,舍弃a所在序列A中的较小一半,同时舍弃b中所在序列B较大一半,两者舍弃的元素个数相等,在保留的两个升序序列中继续求中位数a和b。
(3)重复上述过程,直至两个序列中只含有一个元素为止,较小者即为所求。
算法时间、空间复杂度分别为O(log2`n), O(1)
综合算法