不同长度的排序数组的中位数

时间:2017-05-28 12:26:16

标签: arrays algorithm sorting median

我有以下算法来计算两个相同长度的排序数组的中位数。

如果我们有不同大小的数组,那么实际中位数是否总是在数组的中位数之间,然后在我们继续选择的子数组的中位数之间是否仍然存在?

算法:

  1. 计算输入数组ar1 []的中位数m1和m2    和ar2 []分别。
  2. 如果m1和m2都相等,那么我们就完成了。      返回m1(或m2)
  3. 如果m1大于m2,则中位数存在于1中    以下两个子阵列。
    1. 从ar1的第一个元素到m1(ar1[0...|_n/2_|]
    2. 从m2到最后一个元素ar2(ar2[|_n/2_|...n-1]
  4. 如果m2大于m1,则中位数存在于一个中    以下两个子阵列。
    1. 从m1到最后一个元素ar1(ar1[|_n/2_|...n-1]
    2. 从ar2的第一个元素到m2(ar2[0...|_n/2_|]
  5. 重复上述过程,直到两个子阵列的大小    变成2。
  6. 如果两个数组的大小为2,则使用以下公式得到   中位数。

    Median = (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1]))/2
    
  7. 示例:

    ar1[] = {1, 12, 15, 26, 38}
    ar2[] = {2, 13, 17, 30, 45}
    

    对于上述两个阵列,m1 = 15且m2 = 17

    对于上述ar1 []和ar2 [],m1小于m2。所以存在中位数     在以下两个子阵列中的一个。

    [15, 26, 38] and [2, 13, 17]
    

    让我们重复上述两个子阵列的过程:

    m1 = 26 m2 = 13.
    

    m1大于m2。因此子阵列成为

    [15, 26] and [13, 17]
    

    现在尺寸为2,所以:

    median = (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1]))/2
           = (max(15, 13) + min(26, 17))/2 
           = (15 + 17)/2
           = 16
    

0 个答案:

没有答案