数据结构
文章平均质量分 73
yygr
这个作者很懒,什么都没留下…
展开
-
数据结构二叉树知识点总结
https://www.cnblogs.com/guoyaohua/p/8595289.html1. 节点的度:一个节点含有的子树的个数称为该节点的度;2. 叶节点或终端节点:度为零的节点; 3. 非终端节点或分支节点:度不为零的节点; 4. 父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 5. 兄弟节点:具有相同父节点的节点互称为兄弟节点; 6. 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 7. 树的高度或深度:树中节点的最大层次; 8. 堂兄弟节点:转载 2022-06-03 14:55:36 · 463 阅读 · 0 评论 -
原表达式转换为后缀表达式
https://blog.csdn.net/summerxiachen/article/details/77073320/为什么要转换原表达式即中缀表达式是人最习以为常、是我们最容易接受的形式。如:A+B∗(C−D)−E/FA+B∗(C−D)−E/F我们很容易就能理解表达式的数学含义,但是要把表达式丢给计算机去处理,它并不能像人一样有逻辑的去判断先处理哪一步,后处理哪一步,它只会严格的按照从左只有执行,因此为了符合计算机运行方式,必须把原表达式转换为对应的后缀表达式才行。如何转换转载 2022-05-23 15:44:37 · 2379 阅读 · 0 评论 -
二叉树遍历的几种常见方法
https://blog.csdn.net/xxxxxxxx00772299/article/details/109318495/二叉树的遍历方法一.二叉树分类:完全二叉树 满二叉树 扩充二叉树 平衡二叉树二.二叉树的四种遍历方式:前序遍历(先根,再左,最后右) 中序遍历(先左,再根,最后右) 后序遍历(先左,再右,最后根) 层次遍历(说不清)1.递归遍历(1)前序遍历遍历方法:先根节点,再左节点,最后右节点。实现代码:/*声明结点TreeNode转载 2022-05-20 16:39:40 · 2117 阅读 · 0 评论 -
布隆过滤器解决缓存穿透方案附上代码
https://juejin.cn/post/7068578263638999048概述缓存击穿,大家多多少少听说过。那么这个问题到底是个什么问题?怎么解决呢?这个问题其实是在高并发场景下,使用缓存提高访问速度,一些非法访问或者说攻击刻意绕过缓存,来直接攻击我们数据库。导致我们缓存形同虚设,并没有起到缓存效果。这个问题解决的根本就是过滤掉非法请求,只允许访问合法数据即可,而布隆过滤器就是用来过滤非法请求的,能达到我们预想的效果。布隆过滤器原理原理图1.首先会初始化一个全0比特位的转载 2022-04-17 11:04:23 · 1118 阅读 · 0 评论 -
Redis 之布隆过滤器,增强版,布谷鸟过滤器
https://www.cnblogs.com/Chary/p/15682276.html大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景:我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个问题,如果很多请求是在请求数据库根本不存在的数据,那么数据库就要频繁响应这种不必要的IO查询,如果再多一些,数据库大多数IO都在响应这种毫无转载 2022-04-16 09:46:29 · 1179 阅读 · 0 评论 -
什么是布隆过滤器?如何解决高并发缓存穿透问题?
https://blog.csdn.net/hollis_chuang/article/details/119524013?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.pc_relevant_aa&spm=1001.2101.3001.4242.2&utm_relevant_index=4日常开发中,大家经常使用缓存,但是你知道大型的互联网公转载 2022-04-16 09:47:27 · 219 阅读 · 0 评论 -
JDK中的BitMap实现之BitSet源码分析
https://www.cnblogs.com/throwable/p/15759956.html前提#本文主要内容是分析JDK中的BitMap实现之java.util.BitSet的源码实现,基于JDK11编写,其他版本的JDK不一定合适。文中的图比特低位实际应该是在右边,但是为了提高阅读体验,笔者把低位改在左边了。什么是BitMap#BitMap,直译为位图,是一种数据结构,代表了有限域中的稠集(Dense Set),每一个元素至少出现一次,没有其他的数据和元素相关联。在索引转载 2022-04-16 09:47:11 · 176 阅读 · 0 评论 -
BitMap介绍
http://events.jianshu.io/p/fefe184876ebBitMap算法流程假设需要排序或者查找的最大数MAX=10000000(lz:这里MAX应该是最大的数而不是int数据的总数!),那么我们需要申请内存空间的大小为int a[1 + MAX/32]。其中:a[0]在内存中占32为可以对应十进制数0-31,依次类推:bitmap表为:a[0]--------->0-31a[1]--------->32-63a[2]--------...转载 2022-04-16 09:47:48 · 647 阅读 · 0 评论 -
记一篇REDIS布隆过滤器的使用
https://zhuanlan.zhihu.com/p/89883126开场:如何判断一个大集合中是否含有某个元素?背景:为了最大化提升广告转化效果,业务方决定对接巨量引擎,广点通以及快手RTA服务。并针对自身情况决定是否出广告(新用户出,旧用户不出)。大致示意图要求: 1. QPS至少要能撑住30W。2. 接口响应不能超过60ms面临的问题:1.高并发——> 负载均衡这块交由中台完成(部署到k8s, 由40个pod分摊掉流量)。2.低延迟 ——>.转载 2022-04-14 08:11:20 · 635 阅读 · 0 评论 -
Java实现布隆过滤器
https://blog.csdn.net/yang353933546/article/details/122732903布隆过滤器海量数据处理以及缓存穿透这两个场景让我认识了 布隆过滤器 ,我查阅了一些资料来了解它,但是很多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让更多人了解布隆过滤器,并且会实际去使用它!下面我们将分为几个方面来介绍布隆过滤器: 什么是布隆过滤器? 布隆过滤器的原理介绍。 布隆过滤器使用场景。转载 2022-04-14 08:13:37 · 1132 阅读 · 2 评论 -
布隆过滤器概念及其公式推导
https://blog.csdn.net/gaoyueace/article/details/90410735布隆过滤器概念及其公式推导布隆过滤器概念 数据如何存入布隆过滤器 误判情况 实际应用面试题 公式推导 误判概率即失误率的证明和计算 其他使用场景公式推导内容转自博客布隆过滤器 (Bloom Filter) 详解_MWhzx的博客-CSDN博客布隆过滤器概念数据如何存入布隆过滤器布隆过滤器是由一个很长的二进制矢量和一系列哈希函数组成的。.转载 2022-04-14 08:11:28 · 647 阅读 · 0 评论 -
B树和B+树的插入和删除
https://www.jianshu.com/p/52ad1ae8aedbB树和B+树的插入和删除一. B树1.1B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:每个结点最多有m-1个关键字。 根结点最少可以只有1个关键字。 非根结点至少有Math.ceil(m/2)-1个关键字。 每个结点中的关键字都按照.转载 2022-03-30 11:39:22 · 1855 阅读 · 2 评论 -
布隆过滤器原理及应用场景
https://www.cnblogs.com/qdhxhz/p/11237246.html开发一个电商项目,因为数据量一直在增加(已达亿级),所以需要重构之前开发好的秒杀功能,为了更好的支持高并发,在验证用户是否重复购买的环节,就考虑用布隆过滤器。也顺便更加深入的去了解下布隆过滤器的原理,感觉还是蛮有意思的,这一连串的公式不静下心来思考,很容易被绕晕。一、概述1、什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询。根据查询结果可以用来告转载 2022-03-26 14:00:58 · 2336 阅读 · 0 评论 -
Bloom Filter概念和原理
https://blog.csdn.net/loushuiyifan/article/details/84339151?spm=1001.2014.3001.5502一提到元素查找,我们会很自然的想到HashMap。通过将哈希函数作用于key上,我们得到了哈希值,基于哈希值我们可以去表里的相应位置获取对应的数据。除了存在哈希冲突问题之外,HashMap一个很大的问题就是空间效率低。引入Bloom Filter则可以很好的解决空间效率的问题。原理Bloom Filter是一种空间效率很高的随机转载 2022-03-26 13:45:18 · 545 阅读 · 0 评论 -
红黑树删除详细解读
红黑树(二):删除 - 知乎红黑树的删除确实复杂。侯捷的那本《STL源码解析》都跳过了这一节。《算法导论》里倒是没有跳过,但是我认为讲得不是很好。今天我不自量力,也来挑战一下,看能不能讲清楚了。如果需要删除的结点有两个孩子,我们的做法是找到这个结点的中序后继,将后继结点中的数据拷贝至待删除结点,然后删除后继结点。而后继结点必然最多只有一个子结点,这样我们就把删除两个孩子的结点转为删除一个孩子的结点。在删除的过程中,我们只关心树是否仍然保持红黑树的性质,数据是否组织正确,而不关心这个结点是最初要删转载 2022-03-20 16:12:20 · 810 阅读 · 0 评论 -
浅析线性表(链表)的头插法和尾插法的区别及优缺点
https://www.cnblogs.com/swing-wang/p/14653890.html线性表作为数据结构中比较重要的一种,具有操作效率高、内存利用率高、结构简单、使用方便等特点,今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺点线性表因为每个元素都包含一个指向下一元素的指针,所以新增、删除、修改起来非常简单迅速就像火车一样,一节一节的,想增加就加上一节就成,非常方便那么在插入的时候却有两种方法,头插和尾插顾名思义,头插就是将新元素插在链表头部,尾插就是将新元素插在链表尾部转载 2022-03-18 16:27:28 · 3531 阅读 · 2 评论 -
avl树平衡因子,平衡调整,结点左右旋和结点插入删除总结
https://blog.csdn.net/fengyuyeguirenenen/article/details/123175641符号说明当前结点: pr平衡因子: bf当前结点子节点: p画图工具: avl树一.平衡因子平衡因子bf = 左子树高 - 右子树高bf数值正值0负值形状左倾斜完全平衡右倾斜二.非平衡状态行是pr(当前结点)的bf 列是p(子结点)的bf+2-2+1LL型RL型0LL型RL型-1原创 2022-02-28 13:46:58 · 3008 阅读 · 2 评论 -
avl树的插入操作和删除操作
https://blog.csdn.net/Faded0104/article/details/75042985avl树相比于搜索二叉树每个结点是多了个平衡因子bf,avl树时时刻刻要维持树中的每个结点的平衡因子的绝对值小于等于1.avl树的插入操作avl树因为要保证每个结点的平衡因子要时时刻刻都符合要求,则树中每插入一个结点,都可能引起平衡被打破,所以每次插入一个结点,都要从插入的结点往上进行检查是否有哪个结点需要调整. 要在插入新结点后进行平衡检查,则需要把插入结点的插入过程的下行路线上的每一个结转载 2022-02-28 10:51:33 · 527 阅读 · 0 评论 -
【数据结构】节点和结点,到底怎么区分?
https://blog.csdn.net/qq_42270373/article/details/83758928你们有没有纠结过这样一个问题,就是数据结构链表中结点的“结”到底是哪个字?说实话,在写这篇博客之前,我一直以为链表中的结点叫“节点”,,所以不管是给代码写注释,还是理解方面,我都觉得是“节点”,今天就来说一下节点和结点到底有什么不同?节点呢,被认为是一个实体,有处理能力,比如,网络上的一台计算机;而结点则只是一个交叉点,像“结绳记事”,打个结,做个标记,仅此而已,还有就是,要记住:一般算转载 2022-02-14 15:26:10 · 1670 阅读 · 0 评论 -
头结点(哑元结点)的作用总结
https://www.cnblogs.com/Frank-Hong/p/13488339.html问题处理链表问题有时候会用到哑元。那么什么时候需要哑元什么时候可以不需要呢?回答当处理head节点和处理其余节点需要用到不同做法时(因为head前面没有节点),为了统一做法需要用到哑元。示例(1)以链表节点顺序交换问题为例:链表节点顺序交换问题一般需要三个指针。两两交换问题见 24.两两交换链表中的节点模型:pre->l1->l2->rest (l1,l2为待交换的两个结转载 2022-02-14 15:17:34 · 811 阅读 · 0 评论 -
【算法导论】红黑树详解之插入
https://blog.csdn.net/cyp331203/article/details/42677833 红黑树是建立在二叉查找树的基础之上的,关于二叉查找树可以参看【算法导论】二叉搜索树的插入和删除和【算法导论】二叉树的前中后序非递归遍历实现。对于高度为h的二叉查找树而言,它的SEARCH、INSERT、DELETE、MINIMUM、MAXIMUM等操作的时间复杂度均为O(h)。所以转载 2022-02-11 11:59:29 · 2071 阅读 · 0 评论 -
数据结构-线性结构-链表、单链表、双端链表、双向链表
https://www.cnblogs.com/bjlhx/p/10751938.html一、概述链表是一种插入和删除都比较快的数据结构,缺点是查找比较慢。除非需要频繁的通过下标来随机访问数据,否则在很多使用数组的地方都可以用链表代替在链表中,每个数据项都包含在“链结点”中,一个链结点是某个类的对象。每个链结点对象中都包含一个对下一个链接点的引用,链表本身的对象中有一个字段指向第一个链结点的引用,如下图所示:在数组中,每一项占用一个特定的位置,这个位置可以用一个下标号直接访问,就像一排房子,你可以转载 2022-02-09 11:21:03 · 489 阅读 · 0 评论 -
mysql的innodb数据存储结构
https://www.cnblogs.com/qq289736032/p/11160143.html数据库磁盘读取与系统磁盘读取1,系统从磁盘中读取数据到内存时是以磁盘块(block)为基本单位,位于同一个磁盘块中的数据会被一次性读取出来。2,innodb存储引擎中有页(Page)的概念,页是数据库管理磁盘的最小单位,innodb存储引擎中默认每个页的大小为16kb,每次读取磁盘时都将页载入内存中。3,系统一个磁盘块的大小空间往往没有16kb这么大,因此innodb每次io操作时都会将若干个地址连转载 2022-02-06 10:36:36 · 1404 阅读 · 0 评论 -
深入理解MySQL索引底层数据结构与算法
https://blog.csdn.net/u010922732/article/details/82992920 目录 一 理解索引的特性 二 索引的各种存储结构及其优缺点 (一) 二叉树 (二) 红黑树 (三) Hash (四) B-Tree (五) B+Tree(MySQL索引的真正存储结构) 三. 联合索引底层存储结构 一 理解索引的特性 索转载 2022-02-06 10:23:05 · 103 阅读 · 0 评论 -
java实现简单二叉树
https://blog.csdn.net/skylibiao/article/details/81195219 二叉树基本知识: 一、树的定义 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。 树具有的特点有: (1)每个结点有零个或多个子结点 (2)没有父节点的结点称为根节点 (3)每一个非根结点有且只有一个父节点转载 2022-02-06 10:06:40 · 1150 阅读 · 0 评论 -
B-树(B树)详解
https://www.jianshu.com/p/7dedb7ebe033具体讲解之前,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树。特此说明。1、B-树(B树)的基本概念B-树中所有结点中孩子结点个数的最大值成为B-树的阶,通常用m表示,从查找效率考虑,一般要求m>=3。一棵m阶B-树或者转载 2022-02-05 10:20:08 · 29266 阅读 · 10 评论 -
树的度是什么
https://www.zhihu.com/question/294774611问题树的节点的度是指节点的子树个数,那树的度是什么?回答树节点的度数即为该节点孩子的个数。这是一棵树,树的度指其中节点的度最大值。比如1号节点的孩子是2、3、4,则1号节点的度数是3,且1号节点的度是最大的,故该树的度为3。...转载 2022-02-05 09:40:10 · 6669 阅读 · 0 评论 -
平衡二叉树平衡旋转操作总结
https://www.bilibili.com/video/BV1e4411x7rZ?from=search&seid=17514736605915672588&spm_id_from=333.337.0.0左旋:某节点左旋操作为该节点连同其左子树和右子树的连接线下滑到子节点的左子树,子节点原来的左子节点变为下滑的节点的右子节点右旋:某节点右旋操作为该节点连同其右子树和左子树的连接线下滑到子节点的右子树,子节点原来的右子节点变为下滑的节点的左子节点1.LL(右旋)最后插入导致不平衡转载 2022-01-28 17:29:09 · 279 阅读 · 0 评论 -
Java数组转List的三种方式及对比
https://blog.csdn.net/x541211190/article/details/79597236 前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。 一.最常见方式(未必最佳) 通过 Arr转载 2022-01-25 10:53:26 · 390 阅读 · 2 评论 -
数据结构讲解 ---- 线性结构详解
https://blog.csdn.net/qq_45574180/article/details/113737110 导航 线性表 线性表定义 相同数据类型 序列(顺序性) 有限 线性表的逻辑结构 线性表的存储结构 顺序存储 顺转载 2022-01-24 21:48:10 · 318 阅读 · 0 评论 -
在顺序队列中,什么叫真溢出?什么叫假溢出?为什么顺序队列通常都采用顺序循环队列结构?
https://zhidao.baidu.com/question/37559933.html在顺序队列中,由于数组空间不够而产生的溢出叫真溢出;顺序队列因多次入队列和出队列操作后出现的有存储空间但不能进行入队列操作的溢出称为假溢出;假溢出是由于队尾rear的值和队头front的值不能由所定义数组下界值自动转为数组上界值而产生的,解决的办法是把顺序队列所使用的存储空间构造成一个逻辑上首尾相连的循环队列。和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的,设转载 2022-01-24 21:09:35 · 6624 阅读 · 1 评论 -
散列表及散列冲突解决方案
https://blog.csdn.net/u010530712/article/details/93166430 1、散列表 看过HashMap源码的同学应该知道,HashMap是基于哈希表(散列表)的 Map 接口的非同步实现。 在我们put了一条key-value数据后,如下图,程序会先将key通过hash(key)这个函数转化成整形,这个整形做为数组的下标,插入数据或查找数据。 我们发现,散列转载 2022-01-24 19:36:58 · 2300 阅读 · 0 评论 -
首元结点,头结点,头指针区别
https://www.cnblogs.com/letianpaiai/p/13227755.html首元结点就是指链表中存储的第一个数据元素的结点,就是结点Li头指针是指向链表中的第一个结点的指针,如果有头结点,那么头指针所指结点为头结点,否则为首元结点头结点是在首元结点之前附加的一个点,其指针域指向首元结点。eg:当数据元素为整型时,头结点的数据域可以保存线性表的长度。...转载 2022-01-23 21:14:43 · 3842 阅读 · 0 评论 -
数据结构讲解 ---- 概述
引言 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互...转载 2022-01-23 16:21:52 · 777 阅读 · 0 评论 -
数据结构与算法概要表
转载 2022-01-23 14:28:39 · 85 阅读 · 0 评论 -
二叉树性质之一终端结点数为 n0, 度数为2的结点数为 n2, 则n0=n2+1公式推导
二叉树只有0,1,2度结点所以n=n0+n1+n2二叉树的进入分支数,即有双亲的结点数除去根节点 M=n-1二叉树的发出结点数,1度发出1个,2度发出2。 可有M=n1+2*n2综上可得n=n0+n1+n2M=n-1M=n1+2*n2化简即有n0=n2+1...转载 2022-01-07 11:45:42 · 1642 阅读 · 0 评论