B树

来源:互联网 发布:minitab比较两组数据 编辑:程序博客网 时间:2024/05/16 05:51

             (1)B树应用

                      1> 常用作数据库的索引。

                      2>因为大量数据存储在磁盘中,所以io次数就成为了评价索引结构的优劣。从B-Tree分析,可知检索一次最多要访问树高h-1个节点(因为根节点常驻内存),所以复杂度为O(h)=O(logN),底数m为B-Tree的叉,通常非常大,超过100,所以h非常小,通常不超过3,所以只需3次IO就可以实现查找,效率是非常高的(注意此处说3次io的前提是:将节点设置为1个页面大小,否则会导致调入一个节点多次io)

                      3>与红黑树比较

                           因为具有相同数量节点N的情况下,红黑树的高度明显要比B-tree高,所以效率明显比B-tree差很多

             (2)B树定义

                      1> 核心定义:

                           1.定义一条记录是一个二元组[key,data],key为作为索引的列的值,对于不同记录,key互不相同;data是该条记录的其他数据

                           2.每个非叶子节点由n-1个key和n个指针组成

                           3.每个叶子节点的指针均为空,最少包含一个key

                           4.所有叶子节点在同一深度

                           5.每个指针要么为空,要么指向另一个节点。

                                  如果某个指针在节点node的最左边且不为null,则其指向的节点中所有的key均小于node的第一个key的值

                                  如果某个指针在节点node的最右边且不为null,则其指向的节点中所有的key均大于node的最后一个key的值

                                  如果某个指针在节点node的左右相邻key为key1和key2且不为null,则其指向节点的所有key均大于key1,小于key2

                                    

                      2> 严格定义(m阶B树):

                           1.树中每个节点最多含有m个孩子(m>=2)

                           2.除了根节点和叶子节点以外,其他每个节点至少有ceil(m/2)个孩子,最多m-1个(如m=5,那么至少有3个孩子,最多4个)

                           3.根节点至少有2个孩子

                           4.所有叶子节点都出现在同一层,叶子节点不包含任何信息,相当于查询失败节点

                           5.每个非终端节点包含n个关键字:(n,p0,k1,p1,k2,p2.......kn,pn)

                               ki为关键字,且关键字按顺序升序排列ki-1 < ki

                               pi为指向子树的节点,指针pi-1指向子树中的所有节点的关键字均大于ki-1,小于ki

                              

             (3)B树查找

                             由于B-tree的特性,在B-tree中按key检索数据的算法非常直观:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则根据指针递归查找对应区间的节点,知道找到节点或找到null指针,前者表示查找成功,后者表示查找失败。



             (4)B树深度

                             目标为m阶B-tree,那么每个非根节点的度最大为 t = ceil(m/2),那么就有

                       






0 0
原创粉丝点击