Skip List(跳表)

Skip List(跳表)

  • Skip List(跳表)是一种随机化的数据结构,其效率可比拟于二叉查找树,查找的时间复杂度O(logn),空间复杂度O(n)。简单的来说就是在有序链表的基础上加了索引,实现对链表的操作可以不用从头开始一个个的遍历,而是可以快速的跳过部分列表,跳表因此而得名。

概念

在这里插入图片描述

  • 假设有这样一个有序单链表,它的跳表样子可能如下:

在这里插入图片描述

  • 一个跳表,应该具有以下特征:
    • 一个跳表应该有几个层(level)组成;
    • 跳表的第一层包含所有的元素;
    • 每一层都是一个有序的链表;
    • 如果元素x出现在第i层,则所有比i小的层都包含x;
    • 第i层的元素通过一个down指针指向下一层拥有相同值的元素;
    • 在每一层中,-1和1两个元素都出现(分别表示INT_MIN和INT_MAX);
    • Top指针指向最高层的第一个元素。
  • 这样,假如说我想查找10,那么先从Level3的1节点开始,到7节点,通过7节点的Down指针到达Level2的7节点,然后到9节点,通过9节点的Down指针最后到level1的9节点,再查到10节点,这样访问顺序就是1->7->9->10,只访问了4个节点,而挨个遍历需要访问8个节点。
  • 通常,每一层索引的个数是有限制的,一般如果原始链表有n个节点,那么上一层就有n/2个节点,再上一层就是n/4个节点,以此类推,最上层节点数一般就是2个,从而使得有序链表能够实现近乎二分查找。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值