红黑树,b-树,b+树

         注意:自己之前对b-树和b+树的认识不足,具体认知见http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

         B-树,B+树,红黑树都是用在搜索领域的。只不过各自的场景不尽相同,首先对搜索过程进行进一步的分析:搜索比较频繁的一个操作是在树的节点之间的跳转,这个过程一直到搜索到相应值或是叶子节点才停止。首先描述一个前提:如果我们认为节点之间的跳转所花费的时间和普通的链表上的指针移动是一个量级的,那么平衡的二叉树(利用红黑树实现)几乎具有最优的时间复杂度。

         但是当前提不成立时,结论也就不成立,这也就是为什么会产生B-树和B+树。

         前提成立的条件是,所有的节点存储在一块区域,在不同存储地址之间跳转花费的时间很短。这是红黑树的基本应用场景,红黑树处理的数据量都相对较小,内存是可以存得下的。

         但是当场景变换到磁盘存储,情形就有了很大变化,如果数据范围较大,可能分布在不同的柱面、盘片、磁道上的盘块,此时节点之间跳转的时间,需要进行机械操作,这个时候花费时间就比较长。为了提高效率必须减小节点之间跳转的次数,通过分析可知,跳转次数是由树的高度决定的,因此就要减少树的高度。减少了高度后,很自然每个节点要存储更多的目标值(在二叉树中,每个节点只需要存储一个关键值),有更多的孩子节点(孩子节点数总是比关键值大1)。但是,需要注意的一点是,这些目标值是按照非降序,或是非升序排列的,其子树的所有值也必须满足相应的大小要求。节点存储多个关键值后,虽然减少了节点间的跳转次数,但是节点内部退化成了遍历操作,因此单个节点不能存储太多的信息。

         B+树是对B-的改进。B+对B-树的改进是,非叶子节点并不像B-树那样要存储目标信息,更像是索引,存储其子树根节点的最大值或最小值。所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。 (而B 树的叶子节点并没有包括全部需要查找的信息)所以B+树节点存储的信息减小,在同一块基本存储单元上,可以存储更多的节点,进一步减少了机械结构的跳转,进而提升了效率。

         数据库索引采用B+树的主要原因是 B-树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。正是为了解决这个问题,B+树应运而生。B+树只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B-树不支持这样的操作(或者说效率太低)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值