跳跃表(Skip List)
2013-09-07 16:51
211 查看
跳跃表(Skip List),它是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。
基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表,因此得名。所有操作都以对数随机化的时间进行。。他是一种多路查找的有序链表。所以他有几个特点:
1,顺序的链表
2,期望时间复杂度均为O(logn)
3,并发性能甚至好于红黑树,因为跳跃表在并发操作的时候只需要对局部加锁,而红黑树的平衡等操作本身就多耗费一些时间,在并发的情况下枷锁的范围还比较大(这个问题后续再研究)
跳跃表思想比较简单,下图(从别处找的)基本上就能说明跳跃表了。
跳跃表的查找和删除都比较的简单。还是说一下插入操作,插入除了要插入到最低层链表中,还要确定该元素是否要出现在其他的高层,决定插入元素是否同时插入到上一层主要是根据50%的随机概率事件。当然用软件实现完成还不可能吧,下面的代码是参照jdk当中的ConcurrentSkipListMap的随机算法。
/**
伪随机算法(xorshift RNG)但是可以满足需求,其主要采用异或和移位来实现
参考文献http://www.jstatsoft.org/v08/i14/paper
*/
private int randomLevel() {
int x = randomSeed;
x ^= x << 13;
x ^= x >>> 17;
randomSeed = x ^= x << 5;
if ((x & 0x8001) != 0) // test highest and lowest bits
return 0;
int level = 1;
while (((x >>>= 1) & 1) != 0) ++level;
return level;
}
详情可参照原著 A Skip List Cookbook
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.6776&rep=rep1&type=pdf
基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表,因此得名。所有操作都以对数随机化的时间进行。。他是一种多路查找的有序链表。所以他有几个特点:
1,顺序的链表
2,期望时间复杂度均为O(logn)
3,并发性能甚至好于红黑树,因为跳跃表在并发操作的时候只需要对局部加锁,而红黑树的平衡等操作本身就多耗费一些时间,在并发的情况下枷锁的范围还比较大(这个问题后续再研究)
跳跃表思想比较简单,下图(从别处找的)基本上就能说明跳跃表了。
跳跃表的查找和删除都比较的简单。还是说一下插入操作,插入除了要插入到最低层链表中,还要确定该元素是否要出现在其他的高层,决定插入元素是否同时插入到上一层主要是根据50%的随机概率事件。当然用软件实现完成还不可能吧,下面的代码是参照jdk当中的ConcurrentSkipListMap的随机算法。
/**
伪随机算法(xorshift RNG)但是可以满足需求,其主要采用异或和移位来实现
参考文献http://www.jstatsoft.org/v08/i14/paper
*/
private int randomLevel() {
int x = randomSeed;
x ^= x << 13;
x ^= x >>> 17;
randomSeed = x ^= x << 5;
if ((x & 0x8001) != 0) // test highest and lowest bits
return 0;
int level = 1;
while (((x >>>= 1) & 1) != 0) ++level;
return level;
}
详情可参照原著 A Skip List Cookbook
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.6776&rep=rep1&type=pdf
相关文章推荐
- 跳跃表(Skip List)的实现及测试 C++实现
- Skip List跳跃表代码实现
- 浅析SkipList跳跃表原理及代码实现
- LevelDB中的Skip List(跳跃表)
- 查找——图文翔解SkipList(跳跃表)
- 跳跃表SkipList的理解
- Skip List(跳跃表)原理详解与实现
- 跳跃表skiplist
- SkipList 跳跃表
- 数据结构之六(跳跃表Skip List)
- Java实现跳跃表(skiplist)的简单实例
- Skip list -- 跳跃表的插入删除搜索等ADT操作的实现与测试
- Skip List(跳跃表)原理详解与实现
- Redis内部数据结构详解之跳跃表(skiplist)
- 跳跃表(skip list) 的实现
- c++实现跳跃表(Skip List)的方法示例
- 【从下而上学习Redis】数据结构篇(一):跳跃表(skiplist)
- 跳跃表SkipList
- 【转】浅析SkipList跳跃表原理及代码实现
- 数据结构与算法(c++)——跳跃表(skip list)