码迷,mamicode.com
首页 > 其他好文 > 详细

跳表SkipList—定义

时间:2014-08-08 16:03:46      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   io   数据   

1.聊一聊跳表作者的其人其事

2. 言归正传,跳表简介

3. 跳表数据存储模型

4. 跳表的代码实现分析

5. 论文,代码下载及参考资料 

<1>. 聊一聊作者的其人其事 

跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lists: a probabilistic alternative to balanced trees,在该论文中详细解释了跳表的数据结构和插入删除操作。

William Pugh同时还是FindBug(没有使用过,这是一款java的静态代码分析工具,直接对java 的字节码进行分析,能够找出java字节码中潜在很多错误。)作者之一。现在是University of Maryland, College Park(马里兰大学伯克分校,位于马里兰州,全美大学排名在五六十名左右的样子)大学的一名教授。他和他的学生所作的研究深入的影响了java语言中内存池实现。

又是一个计算机的天才!

<2>. 言归正传,跳表简介 

这是跳表的作者,上面介绍的William Pugh给出的解释:

Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorithms for insertion and deletion in skip lists are much simpler and significantly faster than equivalent algorithms for balanced trees.

跳表是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。

下面来研究一下跳表的核心思想:

先从链表开始,如果是一个简单的链表,那么我们知道在链表中查找一个元素I的话,需要将整个链表遍历一次。

bubuko.com,布布扣

 如果是说链表是排序的,并且节点中还存储了指向前面第二个节点的指针的话,那么在查找一个节点时,仅仅需要遍历N/2个节点即可。

bubuko.com,布布扣

这基本上就是跳表的核心思想,其实也是一种通过“空间来换取时间”的一个算法,通过在每个节点中增加了向前的指针,从而提升查找的效率。

<3>.跳表的数据存储模型 

 我们定义:

如果一个基点存在k个向前的指针的话,那么陈该节点是k层的节点。

一个跳表的层MaxLevel义为跳表中所有节点中最大的层数。

下面给出一个完整的跳表的图示:

bubuko.com,布布扣


跳表SkipList—定义,布布扣,bubuko.com

跳表SkipList—定义

标签:style   blog   http   color   java   使用   io   数据   

原文地址:http://blog.csdn.net/aigoogle/article/details/38440379

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!