美文网首页
跳跃表-原理(转载)

跳跃表-原理(转载)

作者: 胖虎大哥 | 来源:发表于2019-07-08 20:08 被阅读0次

数据结构的扩展步骤:(在真正设计的时候,下面的步骤的顺序可以置换)

  1.选择一种基础数据结构

  2.确定基础数据结构中需要维护的附加信息

  3.检验基础数据结构上的基本修改操作能否维护附加信息

  4.设计需要的新操作

如果要插入数值3,首先要知道3应该插入的位置。使用二分查找可以最快定位,这一步时间复杂度是O(logN)。

插入过程中,原数组中所有大于3的数都要右移,这一步时间复杂度是O(N)。所以总体时间复杂度是O(N)。

如果使用链表,插入新数的方式如下:

如果要插入3,首先要知道3应该插入的位置。链表无法使用二分查找,只能和原链表中的节点逐一比较大小来确定位置。这一步的时间复杂度是O(N)。

插入的过程倒是很容易,直接改变节点指针的目标,时间复杂度O(1)。因此总体的时间复杂度也是O(N)。

对于比较庞大的数据操作来说,这两种方法显然都太慢了。

——————————————

跳跃表(Skip Lists)是一种基于有序链表的扩展。

插入

新节点和各层索引节点逐一比较,确定原链表的插入位置。O(logN)

把索引插入到原链表。O(1)

利用抛硬币的随机方式,决定新节点是否提升为上一级索引。结果为“正”则提升并继续抛硬币,结果为“负”则停止。O(logN)

总体上,跳跃表插入操作的时间复杂度是O(logN),而这种数据结构所占空间是2N,既空间复杂度是 O(N)。

删除

自上而下,查找第一次出现节点的索引,并逐层找到每一层对应的节点。O(logN)

删除每一层查找到的节点,如果该层只剩下1个节点,删除整个一层(原链表除外)。O(logN)

总体上,跳跃表删除操作的时间复杂度是O(logN)。

进步是留给时间最美的礼物

相关文章

  • 跳跃表-原理(转载)

    数据结构的扩展步骤:(在真正设计的时候,下面的步骤的顺序可以置换) 1.选择一种基础数据结构 2.确定基础数据结构...

  • 跳跃表原理及java实现跳跃表

    对于一个链表的查询和列表不同。如果列表是有序的那么可以用二分查找,时间复杂度为log n,链表即便是有序的,查询一...

  • 跳跃表原理及java实现跳跃表

    对于一个链表的查询和列表不同。如果列表是有序的那么可以用二分查找,时间复杂度为log n,链表即便是有序的,查询一...

  • 跳跃表skiplist原理

    github地址:https://github.com/arkulo56/thought/blob/master/...

  • Redis跳跃表原理

    1)跳跃表由很多层构成。2)跳跃表有一个头(header)节点,头节点中有一个64层的结构,每层的结构包含指向本层...

  • 跳跃表的原理和实现

    链表如何做到二分搜索?我们知道,普通链表查询一个元素的时间复杂度为O(n),即使该链表是有序的,我们也不能通过二分...

  • 跳跃表的原理及实现

    跳跃表理解: 跳跃表首先是一种有序的单链表,然后选用随机算法,选取有序单链表的节点,组成L2层次单链表,依次类推,...

  • 用Python深入理解跳跃表原理及实现

    最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的。第一次听说跳跃表的...

  • Redis Sorted-set有序集合的实现原理

    什么是跳跃表?跳跃表

  • 跳跃表

    什么是跳跃表 跳跃表(skiplist)是一种基于有序链表的扩展,简称跳表 时间和空间复杂度 插入的时间复杂度是:...

网友评论

      本文标题:跳跃表-原理(转载)

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