0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

跳表是用来干什么的

算法与数据结构 来源:后端技术小牛说 作者:后端技术小牛说 2021-11-21 11:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

跳表这一数据结构,已经成为了Redis面试的高频考点。前两年没这么卷的时候,可能大家从开始学习,到拿到大厂offer这一过程,都可能没听说过跳表这一数据结构。

那什么是跳表呢?它是用来干啥的?AVL树红黑树知道吧,对,跳表跟他干的事情差不多。我举个例子大家就明白了。假设目前有一个有序数列:

[2, 11,22, 33, 44, 52, 63]

我们想基于单链表的思想,设计一个数据结构,实现查找时间复杂度为O(logn)。单链表的话,它的结构长这个样子。

当然这个结构,查找时间复杂度妥妥的O(n),那咋改呢?

那换个问法:一般做算法题,手撕代码面试的时候,当咱写了个时间复杂度为O(n)的解法,面试官摇摇头,问你有没有更好的方法,你会怎么做?

常见复杂度O(nlogn) O(n) O(logn) O(1),要优化,一步步来的话,只能上O(logn)了,那复杂度logn最常见的算法是哪个?当然是二分!

思路对了,那对着链表,咋把二分思想融合进去呢?

要不单链表指针这边动动刀子?让指针除了指向后面元素,还能越过几个节点,指向更后面元素?类似二叉查找树?先来看看这个数组对应的二叉查找树长什么样。

当然,由于我们的结构是单链表,所以只能有由小值,指向大值,这个二叉树得改改。

好像有点意思在里面了,再把原先单链表的性质加上。

走线有点凌乱,按单链表的布局显示方式改改:(值得注意的是,我们需要新建一个数组项,每个数组项存储一个指针,指向刚刚二叉搜索树每一层最左侧的节点)

(咋感觉越看越像B+树了(雾))

来看个查找逻辑吧:

当查找到的结点保存的数,比要查找的数小时,跳表就会继续访问该层上的下一个结点。

当不满足时,跳表就会用到当前查找到的结点的指针数组的下一层指针,然后沿着下一层指针继续查找。对于这种数据结构,我们需要从上往下依次查询三个链表,比如我们想查大于35的数字。

首先按左侧数组第一个找,发现中间节点是33,比较一下比35小。

发现33比35小,跳下一个节点。

发现该节点是Null,跳33的下一层节点。

发现52比35大,再跳下一层节点。

发现44比35大,跳下一层节点,但由于这是最后一层节点,即44是第一个比33大的数,满足最终条件,就找到了第一个比35大的数字。

我们知道,二叉平衡树,如果设计插入操作,会特别特别麻烦。对于由二叉平衡树思想改的跳表也是如此,对于我们这边的情况,每增加,或者减少一个新节点,每个节点的高度都需要变化。。那有没有高人改进呢?

既然把二叉平衡树改成这四不像了,为啥再不改改,能不能让他不平衡的同时,还能保证查找效率?

说实话,还真可以,来看看这种跳表。

虽然这个跳表跟咱刚刚讲的跳表比起来,奇形怪状的,但按刚刚的查找思路,还是能做比较好的查询工作的。

而且既然表都长这么奇形怪状了,那添加或者删新元素,其他节点高度不变问题也不大了。

而且惊人的是,如果我们对新插入节点的高度进行随机产生(每次随机大于p,接着往上加高度,小于p停下来),然后别的节点高度保持不变,查找效率还是为O(logn),不会出现像二叉查找树那种直接退化成O(logn)的情况。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7314

    浏览量

    93945
  • Redis
    +关注

    关注

    0

    文章

    390

    浏览量

    12044

原文标题:什么?跳表都不知道的你还敢去面BAT!

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    shell基本介绍及常用命令之shell基本介绍

    Shell是什么?我们在刚开始接触Linux的时候,经常会听到工程师提到Shell这个词,刚开始不知道这是个干什么的,简单的说,它是一个应用,接收用户命令,调用相应的内核接口函数或应用程序,并输出
    发表于 09-28 09:05

    加固计算机是用来干什么的

    加固计算机是一种专门为复杂环境和特殊行业应用设计的高性能设备。它不仅具备常规电脑的数据处理和运算功能,更在结构设计、防护等级和硬件配置方面做了全面优化。例如,它的外壳通常采用镁铝合金或高强度复合材料,具有防尘、防水、防摔的特性,内部还经过防震加固处理,确保在运输、跌落或长时间移动中依旧保持稳定运行。某些加固计算机甚至符合军用标准,能够适应极端环境和高强度任务需求。
    的头像 发表于 08-22 09:55 398次阅读

    充电桩为什么离不开电流传感器?一篇文章带你了解清楚!

    扮演着非常重要的角色。那么,电流传感器在充电桩中到底是干什么的?怎么选才靠谱?今天这篇文章,我们就来聊聊这些你可能一直想知道的问题。电流传感器在充电桩中起什么作用
    的头像 发表于 08-07 10:23 4910次阅读
    充电桩为什么离不开电流传感器?一篇文章带你了解清楚!

    晶振是干什么用的

    在电子设备如繁星般密布于生活各个角落的当今时代,从小巧的智能手表到庞大的服务器,从便捷的手机到家中的智能家电,有一种常常被忽视却起着关键作用的元件——晶振。它体积微小,存在感看似不强,却宛如电子设备的“心脏起搏器”,默默把控着节奏,维系着整个系统稳定、精准地运行。 提供精准时钟信号 晶振最基础且核心的用途,便是生成高度精准的时钟信号。在数字电路的世界里,众多芯片、处理器如同训练有素的士兵,需要依据统一
    的头像 发表于 06-30 10:44 704次阅读

    主板上的显卡的特点是什么?能用来干什么

    在计算机硬件系统中,显卡是负责处理和输出图像的关键组件。安装在主板上的显卡主要分为集成显卡和独立显卡,它们各自具备独特的特点,并在不同场景下发挥着重要作用。
    的头像 发表于 05-22 09:21 723次阅读

    光纤odf架干什么用的

    光纤ODF架(Optical Distribution Frame,光纤配线架)是光纤通信网络中用于光纤配线与管理的核心设备,主要承担光纤线路的连接、分配、调度及保护功能。以下从其核心作用、应用场景及技术优势三方面展开说明: 一、核心功能 光纤熔接与端接 提供熔接盘、适配器面板等模块,支持光纤熔接(永久连接)或快速端接(预制成端跳线),实现主干光缆与分支光缆的可靠连接。 类比:如同电路中的“接线板”,将多根光纤有序整合。 线路分配与调度 通过适配器面板
    的头像 发表于 05-21 13:53 1481次阅读
    光纤odf架<b class='flag-5'>干什么</b>用的

    芯片前端设计与后端设计的区别

    前端设计(Front-end Design):聚焦于电路的逻辑功能实现。本质上是在“纸上”设计电路,包括芯片要“干什么”,要“如何运算”。
    的头像 发表于 05-16 14:56 980次阅读

    继电保护是用来什么的

    继电保护是电力系统中的“安全卫士”,其核心任务是‌快速检测故障并隔离故障区域‌,确保电力设备免遭损坏、防止停电范围扩大,同时维护电网的稳定运行。在现代电力系统中,继电保护装置如同人体的免疫系统,能够在毫秒级时间内识别异常并采取行动,是保障供电安全的核心技术之一。 一、继电保护的四大核心功能 ‌故障检测‌ 实时监测电流、电压、频率等电气参数,精准识别短路、过载、接地故障等异常状态。例如: 短路故障:电流骤增至正常值的数倍至数十倍。 接地故障:中性点电压偏移或零序电流异常。 ‌故障隔离‌ 通过控制断路器在‌20-100毫秒内‌切断故障线路,避免故障蔓延。例如: 输电线路发生短路时,距离保护装置可迅速定位故障点并跳闸。 ‌告警与记录‌ 触发声光报警,并记录故障波形、动作时间等数据,为后续故障分析提供依据。 ‌系统自愈支持‌ 配合自动化设备(如重合闸装置),在故障清除后尝试恢复供电,减少停电时间。 二、继电保护的组成与工作原理 ‌系统架构 ‌组件 ‌功能‌ ‌测量元件 采集电流互感器(CT)、电压互感器(PT)信号 ‌逻辑判断单元 分析参数是否符合故障特征(如过流、差动) ‌执行元件 驱动断路器或发信装置动作 ‌ ‌典型保护原理‌ ‌过电流保护‌:检测电流超过设定阈值(如1.2倍额定电流),适用于配电网线路。 ‌差动保护‌:比较设备两端电流差值,若差值超限则判定内部故障(常用于变压器、发电机)。 ‌距离保护‌:通过阻抗计算定位故障点位置,适用于长距离输电线路。 三、继电保护的应用场景 ‌发电环节‌ 发电机保护:定子接地保护、转子过负荷保护、失磁保护等。 案例:某水电站因差动保护动作,0.1秒内隔离发电机内部短路,避免机组烧毁。 ‌输电与变电环节‌ 输电线路:纵联保护、光纤差动保护,保障跨区域电网安全。 变压器:瓦斯保护(非电量)、比率制动差动保护,防止绝缘油分解或绕组故障。 ‌配电环节‌ 配网馈线:过流保护配合自动重合闸,减少用户停电时间。 数据:90%的配电故障可在300毫秒内隔离并恢复供电。 四、继电保护的技术演进 ‌从电磁式到数字化‌ ‌早期电磁继电器‌:依靠机械触点动作,响应速度慢(>100ms),维护频繁。 ‌微机保护装置‌:集成DSP芯片,支持多判据融合计算,动作时间缩短至20ms以内。 ‌智能化升级‌ ‌广域保护系统‌:基于5G通信实时共享电网状态,实现跨区域协同控制。 ‌AI故障预测‌:利用机器学习分析历史数据,提前预警绝缘老化风险。 ‌挑战与突破‌ 新能源并网:光伏、风电的波动性要求保护装置具备自适应能力。 解决方案:引入“方向性过流保护”应对分布式电源双向电流冲击。 五、总结 继电保护是电力系统安全运行的基石,其价值体现在三个方面: ‌经济性‌:减少设备损坏带来的巨额维修成本(如一台500kV变压器损坏损失超千万元)。 ‌可靠性‌:保障99.99%以上的供电可用性,支撑现代社会稳定运转。 ‌智能化‌:随着数字孪生、边缘计算等技术的融合,继电保护正从“被动响应”迈向“主动防御”。 未来,继电保护将与能源互联网深度结合,成为构建新型电力系统的核心防线。
    发表于 05-06 10:32

    请问图片中电路板的功能?

    朋友们帮看看,这电路模块是干什么用的?
    发表于 04-14 09:40

    综合配线柜是干什么的

    综合配线柜(也称为综合布线柜或综合布线系统配线柜)是一种在多个领域中发挥关键作用的设备。以下是关于综合配线柜的详细介绍: 一、主要作用 集中管理与控制: 综合配线柜能够集中管理和控制网络或电力系统中的线缆和连接设备。通过将各种线缆(如网线、光纤、电话线、电源线等)集中在一个柜子中,可以方便地进行线缆的接入、分配、调度和维护,提高管理效率和便捷性。 保护线缆和设备: 综合配线柜提供了对线缆和连接设备的物理保护。合
    的头像 发表于 03-11 11:08 953次阅读

    gtta光缆是干什么的

    GTTA光缆是一种特定类型的通信光缆,主要用于满足光学、机械或环境的性能规范,并实现光信号的传输。以下是对GTTA光缆的详细解释: 一、主要用途 GTTA光缆作为宽带接入的物理平台,在通信网络中扮演着重要角色。它主要用于室外通信,如馈线和配线等,特别是在接入网中。此外,它还可以用于管道、非金属自承架空等常规敷设方式,以及楼道内竖井布线。 二、结构特点 缆芯:光缆的缆芯由一定数量的光纤组成,这些光纤按照一定方式排列并形成缆
    的头像 发表于 03-06 10:21 874次阅读

    如果需要使用DMD进行成像控制,需要用到哪些部件?

    我想问一下,如果需要使用DMD进行成像控制,需要用到哪些部件?是只需要控制板和DMD芯片么?那么评估模块是用来干什么的呢?
    发表于 02-28 06:40

    AI云服务平台可以干什么

    当今,AI云服务平台,作为连接技术与应用的桥梁,正以其广泛的功能覆盖和深度应用场景,逐步渗透到社会经济的各个角落。下面,AI部落小编带您详细了解AI云服务平台。
    的头像 发表于 02-27 10:11 1031次阅读
    AI云服务平台可以<b class='flag-5'>干什么</b>

    光谱仪是干什么用的

    光谱仪是一种将成分复杂的光分解为光谱线的科学仪器,其作用和功能十分广泛,具体介绍如下:
    的头像 发表于 01-28 14:04 4011次阅读

    ADS1192拥有的两个GPIO1和GPIO2,是用来什么的

    看完ADS1192的芯片手册,总结出下列几个不解之处: 1、管脚不理解: a,关于芯片拥有的两个GPIO1和GPIO2,是用来什么的? b、芯片位双通道,为什么还会有个IN3管脚 c、既然是
    发表于 12-30 07:04