多路平衡查找树(B Tree)(分裂、合并)
Balanced Tree
这个就是我们的多路平衡查找树,叫做B Tree(B 代表平衡)
跟AVL 树一样,B 树在枝节点和叶子节点存储键值、数据地址、节点引用。
它有一个特点:分叉数(路数)永远比关键字数多1。比如我们画的这棵树,每个节点存储两个关键字,那么就会有三个指针指向三个子节点。
B Tree 的查找规则是什么样的呢?
比如我们要在这张表里面查找15。
因为15 小于17,走左边。
因为15 大于12,走右边。
在磁盘块7 里面就找到了15,只用了3 次IO。
这个是不是比AVL 树效率更高呢?
那B Tree 又是怎么实现一个节点存储多个关键字,还保持平衡的呢?跟AVL 树有什么区别?
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
比如Max Degree(路数)是3 的时候,我们插入数据1、2、3,在插入3 的时候,本来应该在第一个磁盘块,但是如果一个节点有三个关键字的时候,意味着有4 个指针,子节点会变成4 路,所以这个时候必须进行分裂。把中间的数据2 提上去,把1 和3 变成2 的子节点。
如果删除节点,会有相反的合并的操作。
注意这里是分裂和合并,跟AVL 树的左旋和右旋是不一样的。
我们继续插入4 和5,B Tree 又会出现分裂和合并的操作。
从这个里面我们也能看到,在更新索引的时候会有大量的索引的结构的调整,所以解释了为什么我们不要在频繁更新的列上建索引,或者为什么不要更新主键。
节点的分裂和合并,其实就是InnoDB 页的分裂和合并。
多路平衡查找树(B Tree)(分裂、合并)相关推荐
- B树-多路平衡查找树
B树 B树 一个m阶B树的具有的特征(或必须满足的条件) B树的查找 B树插入元素(一定是在叶子节点插入) 1.插入后,没有破坏B树的规则 2.插入后,叶子节点元素超过m-1个 B树删除元素 1.删除 ...
- B+树(加强版多路平衡查找树)
B Tree 的效率已经很高了,为什么MySQL 还要对B Tree 进行改良,最终使用了B+Tree 呢? 总体上来说,这个B 树的改良版本解决的问题比B Tree 更全面. 我们来看一下InnoD ...
- 多路平衡查找树 --- B(B-)树
1 简介 可以用阶数来描述B树, 一棵M阶B树代表着该B树最多有M个孩子节点. 如果M为2, 那么该B树就是一棵二叉搜索树. 一棵M阶B树具有以下性质: 1. 每个节点最多有M - 1个关键字. 跟普 ...
- 平衡查找树C语言程序,树4. Root of AVL Tree-平衡查找树AVL树的实现
对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率.一种解决办法就是要有一个称为平衡的附加的结构条件 ...
- 查找算法之平衡查找树
前面介绍的算法在最坏的情况下还是很糟糕.这次会介绍一种二分查找树并能保证无论如何构造它,他的运行时间都是对数级别的.理想情况下我们希望能够保持二分查找树的平衡性.但是,在动态插入中保证树的完美平衡的代 ...
- [转]B树(多向平衡查找树)详解
B-树是对2-3树数据结构的扩展.它支持对保存在磁盘或者网络上的符号表进行外部查找,这些文件可能比我们以前考虑的输入要大的多(以前的输入能够保存在内存中). (B树和B+树是实现数据库的数据结构,一般 ...
- 平衡查找树C语言程序,C语言数据结构之平衡二叉树(AVL树)实现方法示例
本文实例讲述了C语言数据结构之平衡二叉树(AVL树)实现方法.分享给大家供大家参考,具体如下: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树. 要维持这个树,必须在插入和删除的时候都检 ...
- 数据结构—2-3树、2-3-4树、B树、B+树等多路查找树的原理详解
详细介绍了多路查找树中的2-3树.2-3-4树.B树.B+树的概念的区别,以及它们的应用场景. 文章目录 1 多路查找树的概述 1.1 索引概述 1.2 多路查找树的引出 2 2-3树 2.1 2-3 ...
- 数据结构之平衡树:2-3查找树的介绍——16
平衡树(AVL tree) 引入 之前学习的树,都不是平衡的,查找时需要一个一个往内比较,一个结点只储存一个值,数据量存储较大,树的深度会非常的深,导致数据查询时效率会十分的低,本次学习的平衡树就能解 ...
最新文章
- 独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
- 基于python的人工智能Jiagu深度学习自然语言处理开源工具
- 2020年网站优化思路从哪着手?
- 20155231 实验三 敏捷开发与XP实践
- MySQL为什么有时候会选错索引?
- 转: 加快Android编译速度
- 遍历删除List中的元素,会报错? 用iterator.remove() 完美解决
- 【编译原理笔记03】词法分析:正则表达式、有穷自动机(FA)、DFA与NFA及RE的相互转换、DFA识别单词、语法检测
- c#简易学生信息管理系统
- 计算机机房规范管理,学校计算机机房如何有效科学规范管理
- 辽东学院计算机练习,辽东学院计算机应用基础课件.doc
- 行程单批量打印软件(eTerm航空电子客票行程单打印软件)
- 清华大学计算机科学系王瑀屏,清华大学材料科学与工程系
- node-addon-api 的简单使用,c++数值、字符串、对象、数组转化为js可用数据。
- SSM考试题库管理系统毕业设计源码069043
- 让沟通更高效的职场礼物,讯飞智能录音笔SR502值得入手
- 域名遭到劫持怎么办?
- cocos2d-x 3.0 Win7 + VS2012 下实现贪吃蛇小游戏
- mysql求中位值函数_SQLServer下取中位数(中位值)的方法
- 喜讯:世界首款阿兹海默老年痴呆症治疗药将上市