• 2024-06-23Redis-数据结构-跳表详解
    Redis概述Redis-数据结构-跳表详解跳表(SkipList)是一种基于并联的链表结构,用于在有序元素序列中快速查找元素的数据结构。Redis中广泛使用跳表来实现有序集合(SortedSet)这一数据结构。1.跳表的基本概念和特点跳表的核心思想是通过在不同层级(level)上增加指针来加速查
  • 2024-06-18【面试八股总结】Redis数据结构及底层实现
    一、五种基本数据结构        Redis提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)结构类型结构可存储值结构读写能力使用命令底层数据结构String字符串、整数或浮点数对字符串或字符串的一部分进行操作,对整数或浮点
  • 2024-06-15Java高手的30k之路|面试宝典|精通跳表SkipList
    跳表SkipList跳表(SkipList)是一种数据结构,它在有序链表的基础上,通过增加多级索引来提高查找、插入和删除操作的效率。跳表的平均时间复杂度为O(logn),与平衡树(如红黑树、AVL树)相当,但实现起来更为简单。跳表的结构跳表由多层链表组成,每一层都是一个有序链表。底层(第0
  • 2024-04-14redis为什么一定要用跳表实现有序集合,却不用平衡树,红黑树或者B+树呢?
    平衡树vs跳表平衡树必须满足所有节点的左右子树高度差不超过1,也就是平衡因子范围为[-1,1]。但是对于范围查询来说,利用平衡树通过中序遍历达到和跳表一样的效果,但是平衡树的每一次插入或者删除操作都需要保证整棵树的绝对平衡,只要不平衡就会通过旋转的方式来重新保持平衡,这个过
  • 2024-04-05数据结构篇:跳跃表与B+树的对比与优劣分析
       本文旨在探讨跳跃表的特性及其在实际应用场景中的作用,同时对其与B+树进行比较,以帮助更好地理解和运用这两种数据结构。跳跃表什么是跳跃表(skiplist)        跳跃表是一种基于跳跃链表的有序数据结构,它是一种多层链表,每一层都是一个有序的链表。表的每一层
  • 2024-03-24跳表与二叉搜索树
    跳表与二叉搜索树跳表与二叉搜索树本文探索跳表与二叉搜索树的一些相似之处,以此来加深对跳表结构的深入理解适用场景跳表在Redis中有比较广泛的使用Redis技术要点我们可以认定跳表本质上就是一个平衡二叉搜索树,跳表的目标是为了能够快速的定位key所在的index所以可以
  • 2024-03-15Redis zset 底层结构
    Rediszset底层结构  概要  在Redis的五种主要数据类型中,zset(有序集合)类型可能是最复杂,但也是最强大的一种。zset不仅可以存储键值对,还可以为每个元素分配一个分数,然后根据这个分数进行排序。这使得Zset非常适合用于实现排行榜、时间线等功能。  一、Zset底层结
  • 2024-03-03ConcurrentSkipListMap
    为了引出ConcurrentSkipListMap,先带着大家简单理解一下跳表。对于一个单链表,即使链表是有序的,如果我们想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查
  • 2024-02-27ida pro switch 修复
    修复switch相关链接:Igor’stipoftheweek#53:Manualswitchidioms–HexRays(hex-rays.com)IDAswitch在跳表结构下的修复-blogofchuj(cjovi.icu)举例:__int64__fastcallPayloadProfiler::qt_static_metacall(__int64a1,inta2,unsignedinta3){__i
  • 2023-12-14Redis数据结构5:REDIS_SKIPLIST
    REDIS_SKIPLISTskipList,即:跳表,或者叫跳跃表。skiplist的优势是能支持平均O(logN)复杂度的节点查找。用一句话来说:skiplist就是一个有着索引的list。编码结构简单理解简单来说,skipList有多层“索引”以加快查找速度:其中L1、L2和L3都是一个list。当查找8时,从L3查找到5,再从L
  • 2023-11-28Java开发者的Python快速进修指南:实战之简易跳表
    前言之前我已经将Python的基本语法与Java进行了比较,相信大家对Python也有了一定的了解。我不会选择去写一些无用的业务逻辑来加强对Python的理解。相反,我更喜欢通过编写一些数据结构和算法来加深自己对Python编程的理解。学习任何语言都一样。通过编写数据结构和算法,不仅可以加
  • 2023-11-20第 372 场周赛(位运算技巧,跳表 + 二分,线段树)
     classSolution:deffindMinimumOperations(self,s1:str,s2:str,s3:str)->int:cnt=0fora,b,cinzip(s1,s2,s3):ifnota==b==c:breakcnt+=1ifcnt==0:
  • 2023-11-19跳表模型
    跳表RMQ算法求解静态区间最值的一种算法。f[i][j]表示从i出发,长度为2^j这一段区间的最大值。初始化和递推:voidinit(){for(intj=0;j<M;j++){for(inti=1;i+(1<<j)-1<=n;i++){if(!j)f[i][j]=w[i];el
  • 2023-11-07跳表的设计与实现
    链表作为一种数据结构我们是比较熟知的,相对数组来说插入和删除操作性能比较高,因为数组涉及到移位操作,但数组可以利用二分法进行快速查找,而在链表中想要获取当前元素,就必须知道该元素的上一个节点(头节点除外),这就限制了链表在查找操作的性能,试想有没有一种数据结构,在链表基础上也能
  • 2023-10-03【数据结构】3.跳表和散列
    1.顺序链表字典1.1字典抽象父类#pragmaonceusingnamespacestd;template<classK,classE>classdictionary{public:virtual~dictionary(){}//返回字典是否为空virtualboolempty()const=0;//返回有多少键值对virtualintsize()co
  • 2023-09-28手把手教你实现跳表!
    发布于我的博客,也许同步更新于博客园引入跳表(跳跃表)能够维护一个数的集合(作用类似普通平衡树),查找时间复杂度为\(\logn\),与平衡树一样基于链表结构。由于不需要平衡树那么多旋转什么的,所以效率比较高,一般认为性能能打红黑树。除此以外,链表的特性使它能够以线性时间遍历某个子段
  • 2023-09-09跳跃表算法
    跳跃表(简称跳表)由美国计算机科学家WilliamPugh发明于1989年。他在论文《Skiplists:aprobabilisticalternativetobalancedtrees》中详细介绍了跳表的数据结构和插入删除等操作。图形化探究跳表,先回顾链表。链表的优势就是更高效的插入、删除。痛点就是查询很慢很慢!每次查
  • 2023-09-02redis常用数据类型(转)
    转载:https://blog.csdn.net/u014453898/article/details/112292028redis有5种常用数据类型,string,list,set,zset,hash一、应用string:缓存,限流,计数器,分布式锁,分布式sessionhash:存储用户信息,用户主页访问量,组合查询list:微博关注人时间轴列表,简单队列set:赞,踩,标
  • 2023-08-23Java 常见并发容器总结
    Java常见并发容器总结​ JDK提供的这些容器大部分在java.util.concurrent包中。ConcurrentHashMap:线程安全的HashMapCopyOnWriteArrayList:线程安全的List,在读多写少的场合性能非常好,远远好于Vector。ConcurrentLinkedQueue:高效的并发队列,使用链表实现。可以
  • 2023-08-15redis数据结构跳表
    redis数据结构跳表数据结构跳表节点typedefstructzskiplistNode{//层structzskiplistLevel{//前进指针structzskiplistNode*forward;//跨度unsignedintspan;}level[];//后退指针structzskiplistNode*backward;//分值doublescore;//成员
  • 2023-08-08跳表及其Java实现
    跳表及其实现参考https://zhuanlan.zhihu.com/p/339750543importjava.util.Objects;importjava.util.Random;importjava.util.Stack;/***参考https://zhuanlan.zhihu.com/p/339750543*/publicclassSkipListPractice{staticclassSkipNode<T>{S
  • 2023-08-01跳表的原理--Golang 实现一个简单跳表
    前言最近在看《Redis设计与实现》这本书,书中简单描述了跳表的性质和数据结构,但对它的具体实现没有多讲。书里对跳表结构的描述是这样的:跳跃表节点:typedefstructzskiplistNode{//后退指针structzskiplistNode*backward;//分值doublescore;//
  • 2023-07-30跳表
    查找性能为O(logn)。从最上层开始查找,找到小于目标的最大节点。插入性能高于平衡树。插入一个元素时,会为该元素生成随机个索引层。跳表使用简单的随机数操作而构建出来的多层链表结构,就获取查找性能为O(logn)【论文中有数学证明】
  • 2023-07-26Redis的有序集合Zset为啥用跳表不用二叉树
    跳表和红黑树查找的时间复杂度都是logN,插入删除也是logN。范围查找貌似也都是O(k+logn),其中n是树中节点的数量,k是满足范围条件的节点数量。但是实现起来跳表要简单很多。1.zset有个很核心的操作叫范围查找,我们要查找某个范围区间的元素。跳表可以做到logN时间复杂度内的快
  • 2023-07-21leveldb
    从B树到LSM树《数据库系统内幕》下文中很多图片源自这本书B+树在mysql原理中,进行过B+树与一些数据结构对比:B+树与B树B+树只在叶子节点存储数据,B树非叶子节点也要存储数据,所以B+树的单个节点的数据量更小,在相同的磁盘I/O次数下,就能查询更多的节点B+Tree叶子节点采用链表连接