树型结构及其应用场景

本文概述了二叉树、B树、B+树、23树(红黑树)和Hash树的区别与优化,重点讲解了它们的平衡性、稳定性和适用场景,涉及排序、索引、数据库和区块链等领域。

一、二叉树

    1、完全二叉树:除了叶子层,其它层的节点都是满的,且节点按从左至由分布

     2、满二叉树:除了叶子节点,每个节点都有左右子节点

     3、平衡二叉树(重要):空树或者任意一个节点的左子树和右子树的高度差不超过1

     4、排序二叉树:左节点的值少于根节点,右节点的值大于根节点,时间复杂度为log2n

二、B-tree

      B树是一棵多路平衡二叉树,可以当作索引的存储结构,在理解它之前,我们先看一下它的演化过程。

      当我们想实现一个索引的功能的时候,最先想到的是排序二叉树,因为跟二分查找法一样,时间效率是比较高的,是比较理想的存储结构;但它有个缺点,就是非常不稳定,查找一个值,最好的情况就是在根节点就找到了,只需比较一次即可,最坏的情况就是要找到最后一个节点才能找到,最坏情况比较了多少次呢?取决于这棵树的层数,层数越高,比较的次数越多,极端情况下,二叉树可能都只有左子节点或者只有右子节点,那么有n个节点,就有n层,比较次数为n,可以想见,非常的不稳定。

      一般在项目中,我们宁愿牺牲点性能,查询慢一点,但希望它能稳定;假如同样多的节点,要降低比较次数,就要降低层数,所以二叉树又矮又胖是我们最喜欢的,刚巧平衡二叉树满足我们,所以我们把索引的存储结构设计为平衡的排序二叉树。

      经过调整之后我们发现确实稳定了,但出现了新的问题。我们数据库大都是直接存文件的,查询一条数据每次都得访问一次磁盘,大家知道访问磁盘相对访问内存是比较慢的,它里面有寻找磁道、io等操作上的消耗,这样一来瓶颈出现在了io上,总体上还是不尽如人意,那怎么办呢?

      其实操作系统

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值