使用来自2个排序数组的思想在m个排序数组中找到第n个最小值

时间:2014-03-22 03:22:04

标签: arrays algorithm sorting

请问是否可能?一般的方法在某种程度上就像在两个排序的数组上找到第n个值,忽略不重要的东西并尝试通过在递归中调整n的值来关注其余部分

2排序数组问题会产生一个计算时间O(log(| A |)+ log(| B |),而问题类似,我想问一下m排序数组是否存在时间算法O(log(| A1 |)+ log(| A2 |)+ ... + log(| Am |)),

或者我上面提到的一些类似的变化(由于变量m,我们可能需要一些其他排序算法来处理来自这些阵列的枢轴),

或者如果这种算法不存在,为什么?

我无法通过Google搜索找到此算法

1 个答案:

答案 0 :(得分:0)

有一个简单的随机算法:

  1. 从任何 m 数组中随机选择一个轴。我们称之为 x
  2. 对于每个数组,对 x 进行二进制搜索,以找出< 的值。 x 在数组中。假设我们有 r i < x 在数组 i 中。我们知道 x 在所有数组的并集中具有等级 r = sum(i = 1到m,r i
  3. 如果 n< = r ,我们将每个数组 i 限制为索引 0 ...(r i - 1)并递归。如果 n> r ,我们将每个数组限制为索引 r i ... | A i | - 1
  4. 重复
  5. 预期的递归深度为 O(log(N)),其中 N 是元素的总数,其证明类似于Quickselect,因此预期运行时间类似于 O(m * log 2 (N))

    论文"Generalized Selection and Ranking" by Frederickson and Johnson提出了针对不同场景的选择和排序算法,例如 O(m + c * log(k / c))算法来选择第k个元素来自 m 同等大小的排序序列, c = min {m,k}