反向查找已排序的合并列表

时间:2017-01-11 16:42:58

标签: algorithm sorting

给定具有可比较元素的k个排序列表,其中没有两个元素相等,我们可以通过各种算法将它们合并到新的排序列表L.我的问题是,考虑到这个假设列表L中元素的位置,输出元素列表及其位置的有效(优于合并和排序)算法是什么。

我也很乐意知道相关的关键字。

给定的只是k个排序列表和元素在列表L中的位置。但是不应该创建L,特别是不给出。

1 个答案:

答案 0 :(得分:2)

由于您不知道元素在哪个列表中,因此您必须先检查每个列表,直到找到它为止。但由于这些列表已排序,您可以使用binary search更快地进行此查找。

  • 给出合并列表Lk原始列表l_1l_n和索引x
  • 每个l_i k原始列表的
    • 执行二进制搜索以在L[x]
    • 中查找l_i
    • 如果找到该元素,请返回列表l_i以及其中L[x]的位置

此算法的总复杂度约为 O(k log n) n k 中元素的平均数量>原始名单。

如果您必须为x的多个值重复此操作,则可能需要先将k原始列表转换为sets。这将需要预先工作的 O(kn)来创建集合,但是由于<对于每个x只需要 O(k) em> O(1)在集合中查找。