留言与评论(共有 0 条评论) |
发布时间:2020-04-12 08:37:23
对于一棵m阶的B-树和一棵m阶的B+树,它们的主要差异:①B-树的叶子结点不含任何信息,而B+树的叶子结点含信息(关键字及其记录等)。②B-树上的叶子结点不会指向它的兄弟结点,而B+树上的叶子结点会指向它的兄弟结点。作点解释:这些叶子结点一个指向一个,最终连接成一个链表。③B-树只能进行分区间查找,而B+树上可以有两种查找:顺序查找和分区间查找。④B-树上所有的非叶结点都满足有n个关键字的话有n+1棵子树,而B+树上所有的非叶结点含n个关键字的话只含n棵子树。这个不同引起了如下几点的不同:(1)B-树的非叶结点有n+1个查找区间,而B+树的却少了一个区间,这个区间恰好是最右边的区间(如果存在,这个区间所指的子树上的所有关键字的值都大于结点的所有关键字的值)。(2)在B-树上,除根的非叶结点的子树个数不能少于m/2取上界(这个值用lowbou表示),等价地,关键字的个数不能少于lowbou-1,但在B+树上这个关系发生了变化,除根的其他结点的子树个数同样不能少于lowbou,但关键字的个数却不能少于lowbou,而不是lowbou减一,这个会给B+树的一些算法的具体实现带来不同。(3)由于根结点至少需要两棵子树,因而B-树上的根结点的关键字可以只有一个,但是B+树不能,它至少要有两个关键字,这样它才可以有两棵子树(至于为什么根结点都需要两棵子树,是因为它们都是平衡的)。⑤B-树上每一个关键字都配有记录,而在B+树上只有叶子结点上的关键字才配有记录。作点解释:在B+树上,所有关键字的记录(指针)都集中在叶子结点上,其他地方的关键字只是充当索引,并没有与之配有相应的记录的指针。⑥B-树查找可以停在某个非叶结点上,而B+树不能停在非叶结点上,它需要一直查找到叶子结点才能停下,因为B+树的关键字的记录只在叶子结点上。作点补充和解释:在B+树上只要给定的关键字的大小不要比根结点的所有关键字都大(这样就没查找的必要了,因为全树最大的值就在根结点的最右边),那么对于这个关键字的查找,最后一定是停在叶子结点上的,无论它是否存在在B+树上,或者换句话说,无论查找成功与否。⑦B-树上的关键字在全树中出现且仅出现一次,而在B+树上一个关键字可以出现在多个位置,可以有多个,但只有一个位置的关键字配有记录。⑧B+树非叶结点上最右边的关键字表明了它所有子树中关键字的最大值,而B-树没有这规律B+树和B-树最大的差别可以说是⑤,甚至这不仅是和B-树的差异,和其他一般的BST树都是这样,B+树上非叶结点上的关键字只是索引,它没有记录,而关键字真正的记录是在叶子结点上。注意:①B-树上非叶结点是全部的内部结点,而B+树上的非叶结点不是全部的内部结点,它除去了最下层的结点。②lowbou是子树下界的意思,或者说最小子树个数。
留言与评论(共有 0 条评论) |
全站搜索