SkipList详解

article/2025/8/8 0:41:39

本文参考:《大数据日知录》

概念

SkipList是一种用来代替平衡树的数据结构。
虽然在最坏的情况下SkipList的效率要低于平衡树,但是大多数情况下效率仍然非常高,其插入、删除、查找的时间复杂度都是O(log(N))。
除了高效外,其实现和维护非常简单也是一大优势。

SkipList的使用还是比较广泛的,比如在LevelDB中的MemTable就是使用SkipList实现的,Redis的Sorted Set也是使用SkipList实现的。

核心思路

在正常的有序列表中,我们要查找到一个值的时间复杂度是O(N)。
在这里插入图片描述
如果链表中一半节点可以多保留一个指针指向后继节点的后继节点,那么查找的时间复杂度就可以变成O(N/2)。
在这里插入图片描述
以此类推,如果保留后面三个节点的指针,查找的时间复杂度就是O(N/3)。

至此,SkipList的核心思路就出来的,就是通过保留后面多个节点的指针来提高查找的效率,下图是一个典型的SkipList结构。
在这里插入图片描述

SkipList节点的生成

SkipList中有一个MaxLevel的值,每个节点会随机生成一个1~MaxLevel的值,这个值决定了这个节点有多少个指向后继节点的指针。
如果这个随机值是4,那么这个节点就会有指向后面4个节点的指针。

MaxLevel是可以主动设置的,在Redis中这个MaxLevel默认是64。
MaxLevel设置太大并没有什么意义,具体的还是要看length有多大。

SkipList的查找

在这里插入图片描述
还是以此图为例,比如现在要找12这个节点,那么过程如下:

  1. 首先到3的节点,12>3,所以进入6的节点。
  2. 在6的节点,26>6,并且12<25,12>9,所以进入9的节点。
  3. 在9的节点,12<17,12=12,于是就找到了12的节点。

SkipList的插入

在这里插入图片描述在这里插入图片描述
以上图为例,现在要插入17这个节点。
其过程和查找类似,唯一的问题是,前面的节点的指针是如何保留下来的?

我们可以看到插入结束后,9的level=1的指针指向了17,12的level=0的指针指向了17。
这就意味着,在插入的时候我们就需要保留9的level=1的指针和12的level=0的指针。

在SkipList中是这样做的,有一个update数组,这个数组的大小为maxLevel。
还是以上图为例,在17插入之前,update这个数组中就已经存储了当然每个level的指针。

  • update[0]:12 level=0
  • update[1]:9 level=1
  • update[2]:6 level=2
  • update[3]:6 level=3

SkipList的删除

删除的逻辑和插入类似:

  1. 查找到相应的节点
  2. 通过update数组来实现该节点的逻辑删除
  3. 回收该节点资源

http://chatgpt.dhexx.cn/article/Y47c80qq.shtml

相关文章

跳表(skipList)

一、为何有skipList这种数据结构的出现 我们知道二分查找算法之所以能达到 O(logn) 这样高效的一个重要原因在于它所依赖的数据结构是数组&#xff0c;数组支持随机访问一个元素&#xff0c;通过下标很容易定位到中间元素。而链表是不支持随机访问的&#xff0c;只能从头到尾依…

跳表 skiplist 简介

跳表 skiplist 跳表 (Skip List) 是由 William Pugh 在 1990 年发表的文章 Skip Lists: A Probabilistic Alternative toBalanced Trees 中描述的一种查找数据结构&#xff0c;支持对数据的快速查找&#xff0c;插入和删除。 对于 AVL 树、红黑树等平衡树&#xff0c;在插入过…

SkipList(跳跃表)详解

Introduction: skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff08;Searching&#xff09;&#xff0c;即根据给定的key&#xff0c;快速查到它所在的位置&#xff08;或者对应的value&#xff09; 一般用于解决查找问题的数据结构分为两个大类…

docker中国镜像

一,如果是像redis,mysql等官方的镜像,直接配置阿里云的镜像就可以 1,注册阿里云账号,并登录 2,打开这个网址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 3,页面上会教怎么设置,如下面的截图 二,如果是私有仓库的镜像 非常感谢原作者:https://www.jiansh…

Docker 使用国内镜像仓库

Docker 使用国内镜像仓库 1、问题描述2、总结 1、问题描述 由于某些原因&#xff0c;导致Docker镜像在国内下载速度特别慢。所以为了沉浸式开发。最好切换为国内源。这里以163 的镜像仓库举例。首先修改/etc/docker/daemon.json配置文件。 sudo vi /etc/docker/daemon.json…

MacOS上配置docker国内镜像仓库地址

背景 docker官方镜像仓库网速较差&#xff0c;我们需要设置国内镜像服务 我的MacOS docker版本如下 设置docker国内镜像仓库地址 点击Settings点击Docker Engine修改配置文件&#xff0c;添加registry-mirrors {"builder": {"gc": {"defaultKeepS…

Docker国内镜像加速地址与详细说明

简介 对于动不动就几百M甚至上G的Docker镜像来说&#xff0c;官方镜像总是掉线或速度极慢&#xff0c;为了改善这种情况&#xff0c;建议切换成国内镜像。常用的国内镜像使用阿里云、网易的居多&#xff0c;本篇内容将记录一下Docker的这些国内镜像是怎么使用的。 国内常用的…

Docker国内镜像

1、下面这些镜像实测基本都用不了。 网易镜像中心&#xff1a;http://hub-mirror.c.163.com daocloud镜像市场&#xff1a;https://hub.daocloud.io 七牛云&#xff1a;https://reg-mirror.qiniu.com Azure&#xff1a;https://dockerhub.azk8s.cn 中科大: https://docke…

docker 国内镜像配置

一、常用镜像地址 1、中国科技大学:https://docker.mirrors.ustc.edu.cn 2、阿里云:https://cr.console.aliyun.com/ 3、Docker中国区官方镜像:https://registry.docker-cn.com 4、网易:http://hub-mirror.c.163.com 5、ustc:https://docker.mirrors.ustc.edu.cn 6、daoclo…

window docker国内镜像设置

刚开始使用的时候&#xff0c;发现因为网络的问题&#xff0c;经常出现镜像下载失败的情况。如下图所示。 这是应为docker服务在国外,直接访问会因为网络原因失败或者特别慢,因此我们可以将将镜像源设置为国内的。 一. 在桌面右下角出有一个docker的图标,鼠标右键点击setings,…

【Docker】Docker 设置国内镜像源_docker国内镜像库

文章目录 1. Docker阿里云镜像加速2. 参考资料 点击跳转&#xff1a;Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套&#xff08;质量有保证&#xff0c;内容详情&#xff09; 1. Docker阿里云镜像加速 在国内&#xff0c;从官方的Docker Hub仓库拉取…

docker构建国内镜像服务

在国内想要下载镜像比较困难&#xff0c;因此很多公司都构建自己的私有仓库。如何搭建私有仓库&#xff0c;请参考《docker私有仓库从无到有》。然而即使私有仓库服务构建完成&#xff0c;但是里面没有镜像&#xff0c;一样很苦恼。今天介绍一下如何利用国内云服务商提供的镜像…

电网电压的三相静止对称坐标系和三相电网电压的相量表示法

电网电压的空间电压矢量和电网电压的相量表示这两个概念需要区分清楚。分别参考邱关源的《电路》和张兴的《PWM整流》相关章节。 图2 三相电网电压的相量表示法 电网电压的相量表示&#xff0c;三相相差120度&#xff0c;整体逆时针50HZ旋转&#xff0c;这里的120度是指三分之一…

交流电中为什么要用相量法?

上两节课,电工学了电流和电压的相量表示法,对于复数的引入感觉稀里糊涂的,于是去搜了知乎,一篇文章让我恍然大悟,如果也有不理解的小伙伴可以复制这个,去知乎看详细解答嗷~ https://www.zhihu.com/question/347763932/answer/1103938667 下面👇是我的理解➕概括总结:…

斯泰因梅茨-电路向量法的创始人

施泰因梅茨&#xff08;Steinmetz&#xff0c;Charles Protells&#xff09;德裔美国电机工程师。美国艺术与科学学院院士。1865年4月9日生于德国的布雷斯劳&#xff08;今波兰的弗罗茨瓦夫&#xff09;。1901 &#xff5e;1902 年任美国电机工程师学会主席。1889年迁居美国。他…

相量法

复数 代数形式 三角形式 指数形式 极坐标形式 正弦量 的三要素 峰值&#xff0c;峰峰值 角速度、频率、周期 初相 有效值即 相位差 相量法的基础 则 则 电路定律的相量形式 则 则 则

数字正交下变频(多相滤波法)

[TOC] 多相滤波原理 在上一篇文章中讨论了基于低通滤波方式的正交下变频系统。下面是该种方式的结构图。 图1.1 数字正交下变频 但是,这种典型的数字下变频方式也存在着这样一些缺陷: * 当采样信号为宽带信号时,需要较高的采样频率,此时会带来系统设计的复杂度; * 先滤…

综合函数矩量法原理及实现思路

0引言 前两篇博客我们介绍了基于RWG函数的三维矩量法的基本原理和其对应的代码实现&#xff08;源代码已上传本站&#xff0c;正在审核中&#xff09;。 矩量法作为最早提出的经典数值算法之一&#xff0c;以较高的计算精度和对任意形状目标良好的适应性而被广大学者所偏爱。从…

结点电压法

结点电压的概念 任选电路中某一结点为零电位参考点(用 ⊥表示)&#xff0c;其它各结点对参考点的电压&#xff0c;称为结点电压。 结点电压法适用于支路数较多, 结点数较少的电路。 结点电压的参考方向&#xff1a;从结点指向参考结点。 结点电压法&#xff1a;以结点电压为…