看REDIS相关书籍时,发现有序集合是通过散列表和跳跃表的数据结构来实现的,那么跳跃表是什么鬼,于是查了一下,看了以下链接的文章,并做了下笔记:
http://www.cnblogs.com/acfox/p/3688607.html
一.跳跃表要解决的问题
跳跃表是用于“加速解决有序单链表中元素的速度“的。
二.什么是跳跃表
顾名思议,跳跃表就是跳跃性的查询链表,那如何跳跃呢?首先想到的应该是二分法了,对了,就是利用二分法进行跳跃查询。如下图:
上图中建立了L1L2L3L4层,在查询的时候,先查询L4,然后查询L3L2L1,最终找到相应的元素。
其实说白了,就是利用二分法和索引来加快查询;
这个样子查询的时间复杂度是2logn
三. 插入元素和删除元素时,跳跃表的调整
如果说,在插入和删除L1层元素时,需要依次按照规则来调整L2L3L4层,那复杂性可想而知是很大的。
那么,这时就需要利用概率论的相关知识,当在L1层插入元素是,就利用随机函数(50%概率)来判断L2层L3层L4层是否需要插入元素,这样子能很快的调整跳跃表,而且当数据量很大时,这样的调整和理想的调整非常接近。