域名连接到网站,讨债公司网站建设,怎么免费搭建网站,个人网页怎么做平衡二叉树
基础数据结构左右平衡高度差大于1会自旋每个节点记录一个数据
平衡二叉树#xff08;AVL#xff09;
AVL树全称G.M. Adelson-Velsky和E.M. Landis#xff0c;这是两个人的人名。
平衡二叉树也叫平衡二叉搜索树#xff08;Self-balancing binary search tree…平衡二叉树
基础数据结构左右平衡高度差大于1会自旋每个节点记录一个数据
平衡二叉树AVL
AVL树全称G.M. Adelson-Velsky和E.M. Landis这是两个人的人名。
平衡二叉树也叫平衡二叉搜索树Self-balancing binary search tree又被称为AVL树 可以保证查询效率较高。
具有以下特点
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1并且左右两个子树都是一棵平衡二叉树。 AVL的生成演示https://www.cs.usfca.edu/~galles/visualization/AVLtree.html AVL的问题
众所周知IO操作的效率很低在大量数据存储中查询时我们不能一下子将所有数据加载到内存中只能逐节点加载一个节点一次IO。如果我们利用二叉树作为索引结构那么磁盘的IO次数和索引树的高度是相关的。平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁进而导致效率低下。 为了提高查询效率就需要 减少磁盘IO数 。为了减少磁盘IO的次数就需要尽量降低树的高度 需要把原来“瘦高”的树结构变的“矮胖”树的每层的分叉越多越好。针对同样的数据如果我们把二叉树改成 三叉树 上面的例子中我们将二叉树变成了三叉树降低了树的高度。如果能够在一个节点中存放更多的数据我们还可以进一步减少节点的数量从而进一步降低树的高度。这就是多叉树。
普通树的问题
左子树全部为空从形式上看更像一个单链表不能发挥BST的优势。解决方案平衡二叉树(AVL)
红黑树
hashmap存储两次旋转达到平衡分为红黑节点
在这个棵严格的平台树上又进化为“红黑树”{是一个非严格的平衡树 左子树与右子树的高度差不能超过1}红黑树的长子树只要不超过短子树的两倍即可 当再次插入7的时候这棵树就会发生旋转 B 树和 B 树的差异
B树中非叶子节点的关键字也会同时存在在子节点中并且是在子节点中所有关键字的最大值或最小。B树中非叶子节点仅用于索引不保存数据记录跟记录有关的信息都放在叶子节点中。而B树中 非叶子节点既保存索引也保存数据记录 。B树中所有关键字都在叶子节点出现叶子节点构成一个有序链表而且叶子节点本身按照关键字的大小从小到大顺序链接。
一个b树中大概能存放多少条索引记录
真实环境中一个页存放的记录数量是非常大的默认16KB假设指针与键值忽略不计或看做10个字节数据占 1 kb 的空间如果B树只有1层也就是只有1个用于存放用户记录的节点最多能存放 16 条记录。如果B树有2层最多能存放 1600×1625600 条记录。如果B树有3层最多能存放 1600×1600×1640960000 条记录。如果存储千万级别的数据只需要三层就够了
B树的非叶子节点不存储用户记录只存储目录记录相对B树每个节点可以存储更多的记录树的高度会更矮胖IO次数也会更少。
使用B树存储的索引crud执行效率如何 c 新增
O(lognN)
N 高度
什么是自适应哈希索引
自适应哈希索引是Innodb引擎的一个特殊功能当它注意到某些索引值被使用的非常频繁时会在内存中基于B-Tree所有之上再创建一个哈希索引这就让B-Tree索引也具有哈希索引的一些优点比如快速哈希查找。这是一个完全自动的内部行为用户无法控制或配置
使用命令 SHOW ENGINE INNODB STATUS \G ;
查看 INSERT BUFFER AND ADAPTIVE HASH INDEX