Redis设计与实现-05-跳跃表

《Redis设计与实现》黄建宏版的读书笔记

跳跃表介绍

原书中并没有对跳跃表做详细的介绍,记录下来的信息为自己整理。

参考

  • https://www.cnblogs.com/thrillerz/p/4505550.html
  • https://redisbook.readthedocs.io/en/latest/internal-datastruct/skiplist.html

跳跃表概念

  • 跳跃表是在有序链表的基础上进行扩展,解决有序链表查找困难的问题。
    • 有序链表查找的时间复杂度为O(n)
    • 跳跃表查找的时间复杂度为O(longN)
  • 跳跃表的结构
    • 有很多层构成。
    • 每一层都是一个有序链表。
    • 最底层的链表包含所有的元素。
    • 如果一个元素出现在i层,则i层之下链表都会出现。
    • 每一个节点包含两个指针,一个指向同一层中的下一个元素,一个指向下一层的元素。

img

  • 跳跃表的查找
    • 从最顶层链表开始,如果本层找不到则去下层查找。因为每层都是有序链表,且上层有的元素下层肯定有,所有缩小了下层查找的范围。
    • 如果一直到最后一层都没有找到,则数据不再该链表中。
  • 跳跃表的增加
    • 插入一个元素时,通过随机(抛硬币)的方法来确定是否需要插入。
      • 理想的跳跃表i层的元素数量是i+1的2倍,是i-1层的1/2倍。
      • 第0层是肯定要插入的。
      • 往上的层是否需要插入通过随机来确定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章