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];
             }  
       }
    }
    
  • 相关阅读:
    Mongoose使用
    Koa原理和封装
    微信用户授权
    Koa微信公众号开发
    Koa2+mongoose
    NodeJS-API
    jquery下json数组的操作用法实例
    SqlCacheDependency:asp.net SQL缓存依赖
    SqlCacheDependency轮询数据库表的更改情况的频率
    设置浏览器地址栏URL前面显示的图标
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/5708337.html
Copyright © 2011-2022 走看看