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

Algorithm 已排序合并列表的反向查找,algorithm,sorting,Algorithm,Sorting,给定具有可比较元素的k个排序列表,其中没有两个元素相等,我们可以通过各种算法将它们合并成一个新的排序列表L。我的问题是,给定一个元素在这个假设列表L中的位置,什么是一个有效的(优于合并和排序)算法来输出一个元素的列表及其在其中的位置 我也很乐意知道相关的关键词 给定的只有k个排序列表和元素在列表L中的位置。但不应创建L,尤其是不给定L。由于您不知道元素在哪个列表中,因此必须检查每个列表,直到找到它为止。但由于这些列表已排序,因此可以使用以下命令加快查找速度 给定合并列表L,和k原始列表L\u

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

我也很乐意知道相关的关键词


给定的只有k个排序列表和元素在列表L中的位置。但不应创建L,尤其是不给定L。

由于您不知道元素在哪个列表中,因此必须检查每个列表,直到找到它为止。但由于这些列表已排序,因此可以使用以下命令加快查找速度

  • 给定合并列表
    L
    ,和
    k
    原始列表
    L\u 1
    通过
    L\u n
    和索引
    x
  • 对于每个
    l_i
    原始列表
    • L_i
    • 如果找到元素,请返回列表
      l_i
      以及
      l[x]
      在其中的位置
该算法的总复杂度约为O(k logn),n是k个原始列表中元素的平均数量


如果您必须对
x
的许多值重复此操作,那么将
k
原始列表转换为第一个列表可能会有好处。这将需要O(kn)的前期工作来创建集合,但由于集合中的O(1)查找,因此每个
x
只需要O(k)

@tobias_k如果我理解得很好,给出两个列表
a=[1,3,5]
b=[2,4,6]
,然后
L=[1,2,3,4,5,6]
。搜索L的第三个元素(0索引)应该返回b和1I,我的问题可能措辞不好。关键是我没有列表L,所以我无法查找它的元素。我只得到了职位和k名单。@vuur是的,似乎我误解了问题和你对Aaron解释的回答……这个答案基本上是正确的。如果将
L[x]
引用替换为“组合列表中的第x个元素”