跳跃表 skiplist
有序链表只能逐一查找元素,操作起来比较慢,则出现了跳表,跳表就是在链表的基础上,增加了多级索引,通过索引位置的几个跳转,它通过在每个节点维持多个指向其他节点的指针,而达到快速访问节点的目的,实现数据的快速定位。
**skiplist的作用:**一是实现有序集合键,二是在集群节点中用作内部数据结构
跳表的数据结构:
(1)跳跃表的定义
跳跃表其实可以把它理解为多层的链表,它有如下的性质
- 多层的结构组成,每层是一个有序的链表
- 最底层(level 1)的链表包含所有的元素
- 跳跃表的查找次数近似于层数,时间复杂度为O(logn),插入、删除也为 O(logn)
- 跳跃表是一种随机化的数据结构(通过抛硬币来决定层数)
那么如何来理解跳跃表呢,我们从最底层的包含所有元素的链表开始,给定如下的链表
然后我们每隔一个元素,把它放到上一层的链表当中,这里我把它叫做上浮(注意,科学的办法是抛硬币的方式,来决定元素是否上浮到上一层链表,我这里先简单每隔一个元素上浮到上一层链表,便于理解),操作完成之后的结构如下
查找元素的方法是这样,从上层开始查找,大数向右找到头,小数向左找到头,例如我要查找