跳跃表

本文介绍了跳跃表的基本原理,包括其二分特性、基于概率统计的插入算法以及O(logn)的查询时间复杂度。此外,还探讨了针对磁盘和内存空间的优化策略,并提出了一些提高查询效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本原理

理想的跳跃表是二分的,类似于平衡二叉树,平衡二叉树的调整非常麻烦,所以采用基于概率统计的插入算法,得到容易实现的跳跃表。
允许简单的插入和删除元素,提供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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值