zoukankan      html  css  js  c++  java
  • 查找两个等长升序线性表的中位数

    • 一个长度为L(L≥1)的升序序列S,处在第éL/2ù个位置的数称为S的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2, 4, 6, 8, 20),则S1和S2的中位数是11。现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法。
    • 思考:如果这些数据已有序排列在一个序列中,则只通过一次下标计算,即可求得中位数。题目中所给的数据分属于两个有序序列,其中位数的位置不能再通过简单计算确定。该题可以有多种思路,例如,将两个有序序列归并为一个有序序列后再求其中位数,即可求解。但题目中要求“设计一个在时间和空间两方面都尽可能高效的算法”,这是解题的关键。显然,仅用归并过程求解不能满足要求。由于要处理的序列是升序序列,所以该题的处理过程也可借鉴对有序表进行2路归并的思想,代码如下:
    int M_Search( int A[ ], int B[ ],int n )   
       i = j = k = 0;
       while ( i<n && j<n )
       {    k++;
             if( A[i] < B[j] )
             {     i++;
                    if( k==n )
                           returnA[i-1];
             }
             else
             {     j++;
                    if( k==n )
                           returnB[j-1];
             }  
       }
    }
    
  • 相关阅读:
    背水一战 Windows 10 (26)
    背水一战 Windows 10 (25)
    背水一战 Windows 10 (24)
    背水一战 Windows 10 (23)
    背水一战 Windows 10 (22)
    背水一战 Windows 10 (21)
    背水一战 Windows 10 (20)
    背水一战 Windows 10 (19)
    背水一战 Windows 10 (18)
    背水一战 Windows 10 (17)
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/5708337.html
Copyright © 2011-2022 走看看