【算法复习三】算法设计技巧与优化----算法设计技巧之中位数

题目:设计一个高效算法,求两个等长为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)

 

综合算法


 

posted on 2012-05-06 16:56  小田的专栏  阅读(351)  评论(0编辑  收藏  举报

导航