示意图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [h] ----[ ] ---------------------------------------------------> [N] | | (a) [h] --> [ ] --> [ ] ----------> [ ] ---------------------------> [N] | (a) | | | [h] --> [ ] --> [ ] --> [ ] --> [ ] ----------> [ ] -----------> [N] | | | | | | [h] --> [ ] --> [ ] --> [ ] --> [ ] ----------> [ ] ---> [ ] --> [N] | | | | | | [1] <=> [3] <=> [5] <=> [7] <=> [9] <=> [10] <=> [11]
|
特征:
- 多级链表
- 最底层为双向有序链表
- n 层元素会有概率 p(0 < p < 1),出现在 n + 1 层
indexable skiplist
当指针包含当前节点与下一个节点间的距离属性时,被称为 indexable skiplist
应用
Redis zset
- 在 O(N) 内实现区间范围操作,如,zrange
- 通过 indexable skiplist 在 O(N) 内确定一个节点在链表中的位置,如,zrank
Others
- 通常 skiplist + dict 实现 zset
- dict 支持在 O(1)时间内,根据 key 查找 score
Reference & Thanks