使用来自 2 个排序数组的想法在 m 个排序数组中找到第 n 个最小值
Posted
技术标签:
【中文标题】使用来自 2 个排序数组的想法在 m 个排序数组中找到第 n 个最小值【英文标题】:find nth-smallest value across m sorted arrays using idea from 2 sorted arrays 【发布时间】:2014-04-29 15:54:57 【问题描述】:请问有没有可能?一般的方法就像在两个排序数组上找到第 n 个值,忽略无关紧要的值并尝试通过调整递归中 n 的值来关注其余部分
2个排序数组的问题会产生计算时间O(log(|A|)+log(|B|),虽然问题是相似的,但我想问一下是否存在m个排序数组的时间算法O(log(|A1|)+log(|A2|)+...+log(|Am|)),
或者我上面提到的时间附近的一些类似变化(由于变量 m,我们可能需要一些其他排序算法来处理这些数组中的枢轴),
或者如果这样的算法不存在,为什么?
我只是在谷歌上找不到这个算法
【问题讨论】:
你需要澄清这个问题。您是指所有 m 个数组中的第 n 个最小的吗?还是别的什么? @smci:他/她还有什么意思?我没有看到其他合理的解释 上面说的就是这样,谢谢:p @Niklas-B:还有很多其他的可能性,因为他/她接着说'在两个排序数组上找到第 n 个值'。所以甚至不清楚他们是在谈论 2 还是 m 数组,还是 m 数组中的 2 的中间合并排序,或者什么。为什么不帮助编辑问题以清楚起见? 我知道我看到了类似的问题 - 所以我搜索了标题:***.com/questions/8753345/… 【参考方案1】:有一个简单的随机算法:
-
从任意 m 数组中随机选择一个枢轴。我们就叫它x
对于每个数组,对 x 进行二分搜索,以找出数组中有多少个
期望的递归深度是O(log(N)),其中N是元素的总数,证明类似于Quickselect,所以期望运行时间类似于 O(m * log2(N))。
论文"Generalized Selection and Ranking" by Frederickson and Johnson提出了针对不同场景的选择和排序算法,例如O(m + c * log(k/c))算法从m 大小相等的排序序列,c = minm, k。
【讨论】:
相当令人印象深刻,但我实际上期待一些算法与本主题中所示的一样高效:Find n-th smallest value in two sorted arrays 即只需将案例扩展到 m 个数组,简单地集思广益,它应该可以在 O(log (|A1|)+log(|A2|)+...+log(|Am|)) 但是对于变量 m 应该如何实现?我会将此添加到我的主题中,再次感谢您的工作> @orb 你看过***.com/questions/6182488/median-of-5-sorted-arrays 吗?以上是关于使用来自 2 个排序数组的想法在 m 个排序数组中找到第 n 个最小值的主要内容,如果未能解决你的问题,请参考以下文章