【问题标题】:Find intersection of multiple skip lists查找多个跳过列表的交集
【发布时间】:2022-06-11 05:08:24
【问题描述】:

这是查找两个跳过列表交集的算法:

寻找两个跳过列表的交集 - 斯坦福版权所有

我们可以看到,与一步一步相比,“跳过跳跃”在效率方面有很多好处。

但是在这里我很好奇,如果案例扩展到多个跳过列表,比如 100 个列表,该怎么办?目前我只想到分治法,将多个skip list按2分组,依次推导出交集,然后合并解,听上去既费时又低效。

用最少的时间确定多个跳过列表的交集的更好方法是什么?

【问题讨论】:

    标签: information-retrieval


    【解决方案1】:

    初始化一个指向每个跳过列表开头的指针。假设您有“k”个。

    在两个数据结构中维护每个指针的值:一个计数器(value->count 的哈希映射)和一个最小堆。

    在每一步:

    • 通过检查计数器中值的数量来检查所有指针是否具有相同的值。
      • 如果是这样,则该值在交叉点中。将值添加到您的输出中。 O(1)。
    • 弹出你的最小堆并推进它的指针,相应地更新你的计数器。 O(log(k))。
    • 当您的任何跳过列表用完时停止。

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 1970-01-01
      • 2010-10-13
      • 2013-10-12
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多