美文网首页
数据结构与算法:跳表

数据结构与算法:跳表

作者: yangfei02821 | 来源:发表于2022-03-27 11:30 被阅读0次
定义:

跳表使用空间换时间的设计思路,
通过为有序链表构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。
跳表是一种动态数据结构,支持快速地插入、删除、查找操作。
比如对一个有序的链表,每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。其中索引层节点包含一个down指针,指向下一级节点。以此类推,对于节点数为n的链表,大约可以建立log2n-1级索引。像这种为链表建立多级索引的数据结构就称为跳表。

时间、空间复杂度

查询时间复杂度都是 O(logn),
空间复杂度是O(n)。
跳表的实现非常灵活,可以通过改变索引构建策略,有效平衡执行效率和内存消耗,在实际的软件开发中,原始链表中存储的有可能是很大的对象,而索引结点只需要存储关键值和几个指针,并不需要存储对象,所以当对象比索引结点大很多时,那索引占用的额外空间就可以忽略了。

插入和删除

跳表本质上就是链表,所以仅插入和删除操作的时间复杂度就为O(1),但在实际情况中,要插入或删除某个节点,需要先查找到指定位置,而这个查找操作比较费时,但在跳表中这个查找操作的时间复杂度是O(logn),所以,跳表的插入和删除操作的是时间复杂度也是O(logn)。

跳表索引动态更新?

当往跳表中插入数据的时候,可以选择同时将这个数据插入到部分索引层中,那么如何选择这个索引层呢?可以通过随机函数来决定将这个节点插入到哪几级索引中,比如随机函数生成了值K,那就可以把这个节点添加到第1级到第K级索引中。

为什么Redis一定要用跳表来实现有序集合?

Redis 中的有序集合支持的核心操作主要有下面这几个:
插入一个数据;
删除一个数据;
查找一个数据;
按照区间查找数据(比如查找值在[100, 356]之间的数据);
迭代输出有序序列。

1、其他都也可以使用红黑树来实现,但是其中按照区间来查找数据这个操作,红黑树的效率没有跳表高。而跳表可以做到 O(logn) 的时间复杂度定位区间的起点,然后在原始链表中顺序往后遍历就可以了。这样做非常高效。
2、而且跳表更容易代码实现。可读性好,不容易出错,更加灵活,可以通过改变索引构建策略,有效平衡执行效率和内存消耗。

相关文章

  • Skip List--跳表(全网最详细的跳表文章没有之一)

    跳表是一种神奇的数据结构,因为几乎所有版本的大学本科教材上都没有跳表这种数据结构,而且神书《算法导论》、《算法第四...

  • 算法概览

    重点掌握的数据结构与算法:10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;10...

  • 《数据结构与算法之美》01——系统高效地学习数据结构与算法

    20个最常用的、最基础的数据结构与算法。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树...

  • 数据结构与算法——跳表

    什么是跳表 跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间...

  • 数据结构与算法--跳表

    跳表是一种各方面性能都比较优秀的动态数据结构,可以支持快速地插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑...

  • 数据结构与算法--跳表

    跳表 = 链表 + 多级索引 跳表使用空间换时间的设计思路,通过构建多级索引来提高查询的效率,实现了基于链表的“二...

  • 数据结构与算法:跳表

    定义: 跳表使用空间换时间的设计思路,通过为有序链表构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。跳...

  • 数据结构 - 跳表skiplist

    更多数据结构内容,请参考:数据结构 - 概要 简介 漫画算法:什么是跳跃表? Redis 为什么用跳表而不用平衡树...

  • 有关跳跃表的干货都在这里

    跳表的数据结构 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。...

  • HBase内存管理之MemStore

    基于跳表实现的MemStore基础模型 实现MemStore模型的数据结构是SkipList(跳表),跳表可以实现...

网友评论

      本文标题:数据结构与算法:跳表

      本文链接:https://www.haomeiwen.com/subject/dwejjrtx.html