通过谷歌搜索几分钟,我知道基本想法。
我的问题是,基本案例是什么? 假设有很多基本情况,我用手测试了算法数小时,但我找不到正确的基本情况。 此外,每个递归步骤三个数组的长度将变得不同。即使三个数组的长度不同,步骤4也能工作吗?
答案 0 :(得分:1)
此算法适用于两个相同大小但不是三个的排序数组。在一次迭代之后,您消除了A和C中的一半元素但是B保持不变,因此这些数组中的元素数量不再相同,并且该方法不再适用。对于不同大小的数组,如果应用相同的方法,则将从下半部分和上半部分中删除不同数量的元素,因此剩余元素的中位数与原始数组的中位数不同。
话虽这么说,你可以修改算法,在每次迭代的两端消除相同数量的元素,当一些数组非常小而一些非常大时,这可能是有效的。您还可以将其转换为查找第k个元素的问题,跟踪被丢弃的元素数量以及在每次迭代时更改k的值。无论哪种方式,这比两个阵列情况要复杂得多。
还有另一篇文章谈到一般情况:Median of 5 sorted arrays
答案 1 :(得分:0)
我认为您可以使用选择算法,稍加修改以处理更多数组。
您正在寻找中位数,即 p = [n / 2] th 元素。
选择最大数组的中位数,在该值中找到其他两个数组中的分裂点(二进制搜索,log(n))。现在你知道所选的数字是 k th(k =位置的总和)。
如果k> p,丢弃它上面的3个数组中的元素,如果它更小,则低于它(丢弃可以通过分别维护每个数组的下部和上部索引来实现)。如果它更小,也更新p = p - k。
重复直到k = p。
糟糕,我认为这是log(n)^ 2,让我考虑一下......