数据结构-skiplist跳跃表

1. 是什么

  1. 跳表=链表+多级索引
  2. 跳表是可以实现二分查找的有序链表
  3. skiplist是一种以空间换取时间的结构
  4. 由于链表,无法进行二分查找,因此借鉴数据库索引的思想,提取出链表中关键节点(索引),先在关键节点上查找,再进入下层链表查找。提取多层关键节点,就形成了跳跃表

2. 说说链表和数组的优缺点?为什么引出跳表

链表遍历的时候,时间复杂度最差会出现O(N),我们优化一下,尝试空间换时间,给链表加个索引,称为“索引升级”,两两取首即可。

3. 跳表的时间复杂度

首先每一级索引我们提升了2倍的跨度,那就是减少了2倍的步数,所以是n/2、nl4、n/8以此类推;第k级索引结点的个数就是n/(2k):

假设索引有h级,最高的索引有2个结点;n(2h)=2,从这个公式我们可以求得h=log2(N)-1;所以最后得出跳表的时间复杂度是O(logN)

4. 跳表的空间复杂度

首先原始链表长度为n

如果索引是每2个结点有一个索引结点,每层索引的结点数:n/2,n4,n/8.…,8,4,2以此类推:

或者所以是每3个结点有一个索引结点,每层索引的结点数:n/3,n/9,n/27…,9,3,1以此类推:

所以空间复杂度是O(n):

5. 优缺点

  1. 跳表是一个最典型的空间换时间解决方案,而且只有在数据量较大的情况下才能体现出来优势。而且应该是读多写少的情况下才能使用,所以它的适用范围应该还是比较有限的
  2. 维护成本相对要高·新增或者删除时需要把所有索引都更新一遍;最后在新增和删除的过程中的更新,时间复杂度也是O(og)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值