平衡多路查找树中的多路是什么意思

Posted zqlmianshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平衡多路查找树中的多路是什么意思相关的知识,希望对你有一定的参考价值。

平衡多路查找树(B-Tree)中的“多路”指的是每个节点可以有多个子节点。具体来说,B-Tree是一种平衡的树,其每个节点最多包含m个子节点,其中m被称为B-Tree的阶数。因此,B-Tree中的每个节点都可以拥有多个子节点,并且节点中的键值对数量也可以是多个,这使得B-Tree能够高效地存储和查找大量数据,而且相比于其他平衡树,B-Tree更加适用于磁盘存储等场景。

多路平衡归并和败者树

多路平衡归并和败者树

为什么要引入败者树?

我们都知道,增加归并路数k能有效减少归并趟数S,进而减少I/O。然而,增加归并路数k时,内部归并的时间将增加。做内部归并时,在k个元素中选取关键字最小的记录需要进行k-1次比较。每趟归并n个元素需要做(n-1)(k-1)次比较,S趟归并总共需要的比较次数是
S(n-1)(k-1)=[log k r] (n-1) (k-1)=[log 2 r] (n-1) (k-1)/[log 2 k]
式中,(k-1)/【log 2 k】随k的增长而增长,因此内部归并时间随k的增长而增长。这将抵消由于增大k而减小外存访问次数所得到的效益。因此,不能使用普通的内部归并排序算法。
为了是内部归并并不受k的增大的影响,引入了败者树。

什么是败者树?


败者树是树形选择排序的一种变体,可视为一棵完全二叉树。k个叶节点分别存放k个归并段在归并过程中当前参加比较的记录,内部节点用来记忆左右子树中的“失败者”,而让胜者往上继续进行比较,一直到根节点。若比较两个数,大的为失败者,小的为胜利者,则根节点指向的数是最小值。


因为k路归并的败者树深度为【log 2 k】,因此k个记录中选择最小关键字,最多需要【log 2 k】比较。所以总的比较次数为
S(n-1)【log 2 k】=[log k r] (n-1)【log 2 k】= (n-1) [log 2 r]
可见,使用败者树后,内部归并的比较次数与k无关了。因此,只要内存空间允许,增大归并路数k将有效地减少归并树的高度,从而减小I/O次数,提高外部排序的速度。
需要说明的是,归并路数k并不是越大越好。归并路数k增大时,相应的需要增加输入缓冲区的个数。若可供使用的内存空间大小不变,势必要减少每个输入缓冲区的容量,使得内存、外存交换数据的次数增大。当k值过大时,虽然归并趟数会减少,但读写外存的次数仍会增加。

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的程序设计专栏
订阅专栏后,可以在微信公众号上私聊我,直接发给你源码。
或者关注公众号。

编写不易,感谢支持。

以上是关于平衡多路查找树中的多路是什么意思的主要内容,如果未能解决你的问题,请参考以下文章

B-/B+树 MySQL索引结构

树---数据结构

[转] MySQL索引原理

计算机科学中的术语多路复用是啥意思?

数据结构查找---多路查找树(2-3树)

MySQL索引学习