当前位置:网站首页 > 技术博客 > 正文

跳表数据结构与算法



在 Redis 的 skiplist 实现中,这两个参数的取值为:

 
  
根据前面 randomLevel() 的伪代码,可以很容易看出,产生越高的节点层数,概率越低。定量的分析如下:
  • 节点层数至少为 1。而大于 1 的节点层数,满足一个概率分布。
  • 节点层数恰好等于 1 的概率为 1-p。
  • 节点层数大于等于 2 的概率为 p,而节点层数恰好等于 2 的概率为 p(1-p)。
  • 节点层数大于等于 3 的概率为 p^2,而节点层数恰好等于 3 的概率为 p^2*(1-p)。
  • 节点层数大于等于 4 的概率为 p^3,而节点层数恰好等于 4 的概率为 p^3*(1-p)。
  • ……

因此,一个节点的平均层数(也即包含的平均指针数目),计算如下:

现在很容易计算出:
  • 当 p=1/2 时,每个节点所包含的平均指针数目为 2。
  • 当 p=1/4 时,每个节点所包含的平均指针数目为 1.33。

跳表的平均时间复杂度为 O(logN)

可以了解学习:Redis 内部数据结构详解 —— skiplist-CSDN博客


力扣对应题目链接:1206. 设计跳表 - 力扣(LeetCode)

 
   

了解更多,可以参考:跳表 - OI Wiki (oi-wiki.org)


skiplist 相比平衡搜索树(AVL 树和红黑树)对比,都可以做到遍历数据有序,时间复杂度也差不多。

skiplist 的优势是:

  1. skiplist 实现简单,容易控制。而平衡树增删查改遍历都更复杂。
  2. skiplist 的额外空间消耗更低。而平衡树节点存储每个值有三叉链,平衡因子/颜色等消耗。

skiplist 中当 p=1/2 时,每个节点所包含的平均指针数目为 2。

skiplist 中当 p=1/4 时,每个节点所包含的平均指针数目为 1.33。


skiplist 相比哈希表而言,就没有那么大的优势了。相比而言:

  • 哈希表非极端场景下哈希冲突的平均时间复杂度是 O(1),比 skiplist 快。
  • 哈希表空间消耗略多一点。

skiplist 优势如下:

  1. 遍历数据有序
  2. skiplist 空间消耗略小一点,哈希表存在链接指针和表空间消耗。
  3. 哈希表扩容有性能损耗。
  4. 哈希表在极端场景下哈希冲突高,效率下降厉害,需要红黑树补足接力。 

版权声明


相关文章:

  • string类的常用方法应用编程2025-09-28 10:30:02
  • 召回率精确率 准确率2025-09-28 10:30:02
  • offset函数的作用2025-09-28 10:30:02
  • api自动化测试工具2025-09-28 10:30:02
  • 密码破解软件哪个好2025-09-28 10:30:02
  • 应用层协议要定义哪些内容2025-09-28 10:30:02
  • kernelapcpendingduringnext2025-09-28 10:30:02
  • c写log日志2025-09-28 10:30:02
  • 特征提取技术2025-09-28 10:30:02
  • maven中央仓库下载2025-09-28 10:30:02