数据结构和算法----跳表

跳表是一种有序链表结构,通过多级索引提高查找效率。本文解析跳表定义、时间与空间复杂度分析,以及如何通过随机化索引层级优化结构。

跳表

  • 定义

跳表就是链表的一种变形。来降低链表查找和删除的时间复杂度。跳表其实就是一种可以进行二分查找的有序链表。

这样的结构可以大大提高查找效率例如我要查找8

正常查找需要遍历八个节点,现在只需要遍历七个节点,这个数据量比较小,优势不太明显。数据量越大有优势越明显

这种链表加多级索引的结构就是跳表

  • 分析

时间复杂度:每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的数量就是n/2,第二级索引的数量就是n/4。依此类推!k级索引的个数就是n/2^k。假设索引有h级,最高级的索引有两个节点。通过上面的公式我们可以得到n/(2^h)=2,从而求得h= log2n-1,去掉原始链表。跳表的高度就得log2n。每层最多遍历三个节点。那么时间复杂度就为O(3log2n)去除常数项时间复杂度为O(logn)

空间复杂度:时间复杂度那里说过第一级索引的数量就是n/2,第二级索引的数量就是n/4k级索引是n/2^k。所以所有节点得总和为

n/2+n/4+n/8+…+n/2k

   =(2k-1)n/2k

   =n – n/2k 由 n/(2^h)=2 n – 2 省略常数项空间复杂度为O(n)

  • 优化

当我建立索引之后不断往链表中插入数据时,索引并不随之添加。跳表就会退化成链表。

解决办法,插入数据的同时我们可以将数据随机插入到部分索引层中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值