基本原理
理想的跳跃表是二分的,类似于平衡二叉树,平衡二叉树的调整非常麻烦,所以采用基于概率统计的插入算法,得到容易实现的跳跃表。
允许简单的插入和删除元素,提供O(logn)的查询时间复杂度。元素X插入第n层的概率是1/2^n。
实现时:随机生成一个范围在0-2^maxlevel的一个整数r,如果r<1,插入maxlevel层以下,如果r<2,插入到maxlevel-1层以下,以此类推。
应用及优化
跳跃表在搜索引擎或者数据库中索引的字典结构,构建时并不完全追求速度,还有磁盘空间、内存空间等。优化的话从时间和空间进行,空间分为内存空间和磁盘空间,时间分为构件时间和查询时间。
空间优化:
跳跃表存储的序列太长时,把跳跃表最低层的链表存储在磁盘上,检索时需要一次到多次磁盘才能检索到数据。
继续优化,吧上面几层的节点的数据项变成指针,指向磁盘的便宜地址,检索的性能更低,每一次读取一个节点,都需要读取一次磁盘来获取数据,内存的使用量会变得很小。不适合动态的增加或删除节点。因为每一个更新需要操作好几次磁盘。
时间优化:
把所有数据加载到内存,也可以使用LRU缓存算法折中(有难度)
使用二分查找替代直接遍历,只适合静态。
参考
http://www.open-open.com/lib/view/open1495672892486.html
http://www.cnblogs.com/acfox/p/3688607.html