1.跳跃表
①跳跃表(skiplist)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。
②与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,从而可以实现更高的并发性
③正因为这些优点,跳跃表广泛使用与KV数据库中,诸如Redis、HBase都把跳跃表作为一种维护有序数据集合的基础数据结构
④定义:
- 跳跃表由多条分层的链表组成(设为S0,S1,S2,S3,S4,……,SN)
- 每条链表中的元素都是有序的
- 每条链表都有两个元素:+∞(正无穷大)和-∞(负无穷大),分别表示链表头部和尾部
- 从上到下,上层链表元素集合是下层链表元素集合的子集,集S1是S0的子集,S2是S1的子集
- 跳跃表的高度定义为水平链表的层数
⑤查找
- 如果发现currentNode后继节点的值小于等于待查询值,则沿着这条链表向后查询,否则,切换到当前节点的下一层链表
- 继续查询,直到找到待查询值为止(或者currentNode为空节点为止)
⑥插入
⑦复杂度分析