题目:设计一个高效算法,求两个等长为L的升序序列AB 的中位数。

        例如:S1=11,13,15,17,19

                  S2=2,4,6,8,20

        S1S2的中位数是11

1)问题分析1

             简单的算法是将两个升序序列归并排序,然后求其中位数

 

      算法的时间复杂度和空间复杂度均为0(n)

 

2)问题分析2

      利用归并排序的思想对AB的元素逐个访问,同时计数,当访问到第L个元素时即为所求。

 

      算法时间、空间复杂度分别为O(n), O(1)

 

3)问题分析3

     分别求AB的中位数ab

          (1)若a=b,则ab即为所求。

          (2)若a<b,舍弃a所在序列A中的较小一半,同时舍弃b中所在序列B较大一半,两者舍弃的元素个数相等,在保留的两个升序序列中继续求中位数ab

          (3)重复上述过程,直至两个序列中只含有一个元素为止,较小者即为所求。

      算法时间、空间复杂度分别为O(log2`n),  O(1)

 

综合算法


 

相关文章:

  • 2022-02-01
  • 2021-08-06
  • 2021-05-31
  • 2021-08-18
  • 2021-10-23
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
猜你喜欢
  • 2021-08-15
  • 2021-12-29
  • 2021-12-09
  • 2021-05-01
  • 2021-11-23
相关资源
相似解决方案