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

作者: 全菜工程师小辉 | 来源:发表于2019-07-08 13:40 被阅读3次

跳表的数据结构

跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。

跳表的数据结构

其中-1表示INT_MIN, 链表的最小值,1表示INT_MAX,链表的最大值。

跳表的性质

  1. 由很多层结构组成
  2. 每一层都是一个有序的链表
  3. 最底层(Level 1)的链表包含所有元素
  4. 如果一个元素出现在Level i的链表中,则它在Level i之下的链表也都会出现。
  5. 每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。

1. 跳表的get操作

查找元素117的过程

例子:查找元素 117

  1. 比较21,比21大,往后面找
  2. 比较37, 比37大,比链表最大值小,从37的下面一层开始找
  3. 比较71, 比71大,比链表最大值小,从71的下面一层开始找
  4. 比较85,比85大,从后面找
  5. 比较117,等于117, 找到了节点。

2. 跳表的insert操作

先确定该元素要占据的层数 K(采用丢硬币的方式,这完全是随机的)

然后在 Level 1 ... Level K 各个层的链表都插入元素。

例子:插入 119, K = 2

跳表的insert操作

如果 K 大于链表的层数,则要添加新的层。

例子:插入 119, K = 4

跳表的insert操作

丢硬币决定K的值

插入元素的时候,元素所占有的层数完全是随机的,通过一下随机算法产生:

public int random_level() {
    int k = 1;
    while (Math.random() <= 0.5f) {
        k++;
    }
    return k;
}

相当于做一次丢硬币的实验,如果遇到正面,继续丢,遇到反面,则停止。各个元素的层数,期望值是2层。

3. 跳表的delete操作

在各个层中找到包含 x 的节点,使用标准的 delete from list 方法删除该节点。

例子:删除 71

跳表的delete操作

实现步骤

  1. 定义一个跳表的Node类
  2. 私有变量,保存层数K和链表最高层最小的节点(即最左结点)
  3. 按照上面的图,写出每个函数,注意边界判断

需求只要很明确,接下来都是体力活了。代码就不写了,毕竟跳跃表只是个思想,很多细节东西都是因人而异,因业务而异。

总结

大部分编程语言中的Map类型都是通过红黑树实现的,我们在写程序的时候,可以直接拿过来用,不用自己再去实现一个红黑树。但是跳表并没有一个现成的实现,所以在开发中,如果要使用跳表这种数据结构,需要自己先去实现。

哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

相关文章

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

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

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

    什么是跳跃表?跳跃表

  • 跳跃表

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

  • 跳跃表

    跳跃表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)...

  • 跳跃表

    Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树.基本上,跳跃列表是对有序的链表...

  • 跳跃表

    最近在看redis源码,其中看到跳跃表的部分。无奈大学期间数据结构学的基本上都快忘没了,在网上找了个介绍跳跃表的两...

  • 跳跃表

    跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。《Skip l...

  • 跳跃表

    Skip List定义 Skip List 完整实现 下面是跳表的基本操作 节点的创建 列表的初始化列表的初始化需...

  • 跳跃表

    先看下面这个图。 这里的数据结构就是跳跃表。这个结构比较简单,在底层有一个有序链表,链表的两端有一个哨兵结点。在第...

  • 跳跃表

    redis中有序集合zset是用跳跃表实现的,所以今天学习了一下跳跃表。本文主要讲redis中跳跃表的实现。 一、...

网友评论

    本文标题:有关跳跃表的干货都在这里

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