algorithm - 为什么不使用替代元素作为跳过列表中的垂直搜索节点?

标签 algorithm data-structures skip-lists

在我见过的大多数跳跃列表实现中,它们使用随机算法来决定是否必须将元素复制到上层。

但我认为在每个级别使用奇数索引元素以在上层具有副本会给我们带来对数搜索的复杂性。为什么不使用它?

例如: 数据:1 2 3 4 5 6 7 8 9

跳过列表:

1--------------------

1--------------------9

1--------5------------9

1----3----5----7----9

1-2-3-4-5-6-7-8-9

最佳答案

未使用它是因为它在从头构建列表时易于维护 - 但是当您向现有列表添加/删除元素时会发生什么?以前是奇数索引的元素现在是偶数索引,反之亦然。

在您的示例中,假设您现在添加 3.5,所有这些都是为了按照您描述的方式维护 DS,这将需要 O(k + k/2 + k/4 + ... ) 更改为DS,其中 k 是您刚刚插入的元素之后的元素数。

这基本上为您提供 O(n/2 + n/4 + ...) = O(n) 平均添加/删除复杂性。

关于algorithm - 为什么不使用替代元素作为跳过列表中的垂直搜索节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305770/

相关文章:

c++ - 跳过 list ,他们的表现真的和Pugh Paper所说的一样好吗?

redis - 将已排序的集合插入 REDIS 的最有效方法

algorithm - 求一个递归算法的复杂度

algorithm - 文件、月份、模块和伪代码

algorithm - 寻找唯一可解码的代码

optimization - 用于搜索文件名并获取其路径的数据结构

Haskell 向量 C++ push_back 类比

java - 非动态未排序数组列表的删除不会是 O(n) 吗?

c++ - 在 Unity 中用 C++ 实现组件系统

java - ConcurrentSkipListSet 访问第一个和最后一个元素的复杂性