两个排序数组的中位数

时间:2016-07-20 23:21:00

标签: arrays algorithm

我无法理解下面的基本情况5和6来计算两个排序数组的中位数。 N和M是两个数组长度。

基本情况: 较小的数组只有一个元素

  

情况0:N = 0,M = 2

     

案例1:N = 1,M = 1。

     

情况2:N = 1,M为奇数

     

案例3:N = 1,M均匀

较小的数组只有两个元素

  

情况4:N = 2,M = 2

     

情况5:N = 2,M为奇数

     

案例6:N = 2,M均匀

案例0:第一个数组中没有元素,返回第二个数组的中位数。如果第二个数组也为空,则返回-1。

情况1:两个数组中只有一个元素,因此输出A [0]和B [0]的平均值。

情况2:N = 1,M为奇数 设B [5] = {5,10,12,15,20} 首先找到B []的中间元素,对于上面的数组是12。有以下4个子案例。

  

... 2.1如果A [0]小于10,则中位数为10和12的平均值。

     

...... 2.2如果A [0]介于10和12之间,则中位数是A [0]和。[0]的平均值   12。

     

... 2.3如果A [0]介于12和15之间,则中位数为12和12的平均值   A [0]。

     

...... 2.4如果A [0]大于15,则中位数为12和15的平均值。

在所有子案例中,我们发现12是固定的。因此,我们需要找到B [M / 2 - 1],B [M / 2 + 1],A [0]的中位数,并用B [M / 2]取其平均值。

案例3:N = 1,M是偶数
设B [4] = {5,10,12,15}
首先找到B []中的中间项,在上面的例子中是10和12。有以下3个子案例。

  

... 3.1如果A [0]小于10,则中位数为10.

     

... 3.2如果A [0]介于10和12之间,则中位数为A [0]。

     

... 3.3如果A [0]大于12,则中位数为12.

因此,在这种情况下,找到三个元素B [M / 2 - 1],B [M / 2]和A [0]的中位数。

案例4:N = 2,M = 2 总共有四个要素。所以我们找到了4个元素的中位数。

情况5:N = 2,M为奇数
设B [5] = {5,10,12,15,20}
中位数由以下三个元素的中位数给出:B [M / 2],max(A [0],B [M / 2 - 1]),min(A [1],B [M / 2 + 1])。

案例6:N = 2,M是偶数
设B [4] = {5,10,12,15}
中位数由以下四个元素的中位数给出:B [M / 2],B [M / 2 - 1],max(A [0],B [M / 2 - 2]),min( A [1],B [M / 2 + 1])

我指的是以下网址,用于了解两个排序数组的中位数。 http://www.geeksforgeeks.org/median-of-two-sorted-arrays-of-different-sizes/

1 个答案:

答案 0 :(得分:0)

了解其工作原理的最简单方法是...用铅笔和纸张。 绘制两个数字列表(都是短...),一个具有奇数个元素,另一个是偶数。现在,仔细看看Case 5 vs。案例6的解决方案之间的微小但重要的差异。

由于所呈现的逻辑多次使用MAX()函数,使用铅笔和纸构造情况,其中第一个,MAX()的两个参数中的另一个是“最大的。 “

用那张纸和十二号铅笔在十五分钟左右,你就能说服自己算法(或者,不是?)工作。< / p>

... (是的,这是一个非常严肃的推荐。这是完全我如何解决这些问题!)

相关问题