我无法理解下面的基本情况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/
答案 0 :(得分:0)
了解其工作原理的最简单方法是...用铅笔和纸张。 绘制两个数字列表(都是短...),一个具有奇数个元素,另一个是偶数。现在,仔细看看Case 5 vs。案例6的解决方案之间的微小但重要的差异。
由于所呈现的逻辑多次使用MAX()
函数,使用铅笔和纸构造情况,其中第一个,MAX()
的两个参数中的另一个是“最大的。 “
用那张纸和十二号铅笔在十五分钟左右,你就能说服自己算法(或者,不是?)工作。< / p>
... (是的,这是一个非常严肃的推荐。这是完全我如何解决这些问题!)