知识卡片

SkipList随机索引

普通读书笔记卡 · 1770.a

内容

SkipList 用随机层级给有序链表增加远跳指针,平均查找、插入、删除复杂度接近 O(logN)。它不需要复杂旋转,适合内存有序表,Redis Sorted Set 和 LevelDB MemTable 都受益于这种简洁性。

参考来源

- 位置:《大数据日知录:架构与算法》第3章《大数据常用的算法与数据结构》"3.2 SkipList"一节(源文件:_epub-src/OEBPS/text00008.html) - 结论依据:原文明确"SkipList依靠随机生成数以一定概率来保持数据的平衡分布……其插入、删除、查找数据的时间复杂度都是O(logN)",并列举"LevelDB在实现其用于内存中暂存数据的结构MemTable就是使用SkipList实现的,Redis在实现Sorted Set数据结构时采用的也是SkipList"。 - 原始内容:不像平衡树需要强制保持树的平衡,SkipList依靠随机生成数以一定概率来保持数据的平衡分布。尽管在最坏情况下SkipList的效率要低于平衡树,但是大多数情况下其效率仍然非常高,其插入、删除、查找数据的时间复杂度都是O(logN)……LevelDB在实现其用于内存中暂存数据的结构MemTable就是使用SkipList实现的,Redis在实现Sorted Set数据结构时采用的也是SkipList。