17 | 跳表:为什么Redis一定要用跳表来实现有序集合?

771 阅读1分钟

如何理解跳表

  • 跳表:基于二分思想的链表

    • 二分查询适用于数组,支持随机访问
    • 同样适用于红黑树场景
  • 什么是跳表

    • 有序的单链表查询时间复杂度仍然是O(n)
    • 跳表就是利用额外的空间,建立链表索引

\

用跳表查询有多快

  • 单链表的时间复杂度是O(n)

  • 跳表的时间复杂度为O(logn),通过牺牲空间复杂度得到的 空间复杂度O(n)

    • 在存储对象很大时,索引空间很微小

高效的动态插入和删除

  • 插入和删除的时间复杂度O(logn)\

跳表索引动态更新

  • 如果不采用高效的更新手段,跳表会退化成单链表

    • 红黑树,AVL树的平衡二叉树,左旋和优选保持树大小
  • 通过随机函数决定节点插入到几级索引中

    • 随机生成k

总结

  • 相较于红黑树,跳表增加了范围查询
  • 跳表的代码比红黑树会更简洁