B tree
来源:互联网 发布:网站快速优化排名 编辑:程序博客网 时间:2024/05/19 11:47
1. B树的定义:
1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树,其定义如下:
一棵m阶的B树满足下列条件:
⑴ 树中每个结点至多有m个孩子;
⑵ 除根结点和叶子结点外,其它每个结点至少有m/2个孩子;
⑶ 若根结点不是叶子结点,则至少有2个孩子;
⑷ 所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息;
⑸ 有k个孩子的非终端结点恰好包含有k-1个关键字。
在B树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
B树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,…,Kn,Pn)
其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。
2. B树的查找:
在B树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,…,kj查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查的关键字在某个Ki或Ki+1之间,于是取Pi所指的结点继续查找,直到找到,或指针Pi为空时查找失败。
查找算法演示
性能分析:
设B树包含N个关键字,因此有N+1个叶子结点,叶子都在第I层。因为根至少有两个孩子,因此第二层至少有两个结点。除根和叶子外,其它结点至少有┌m/2┐个孩子,因此在第三层至少有2*┌m/2┐个结点,在第四层至少有2*┌m/2┐2个结点,...,在第I层至少有2*┌m/2┐I-1 个结点,于是有:
N+1 ≥ 2*┌m/2┐I-1
即: I ≥ log┌m/2┐( )
这个公式保证了B树的查找效率是相当高的。
- B-tree、B+tree
- B-Tree/B+Tree
- B-tree B+tree
- B-tree&B+tree
- B-tree/B+tree/B*tree
- BTree,B-Tree,B+Tree,B*Tree
- BTree,B-Tree,B+Tree,B*Tree
- BTree,B-Tree,B+Tree,B*Tree
- B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- BTree,B-Tree,B+Tree,B*Tree
- 【转】B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- B-tree/B+tree/B*tree
- 实践:做LVM分区
- Java中的泛型
- 图像阈值分割Matlab版
- struts
- 【日志】CRC终于搞成了
- B tree
- Eclipse 3.1中的Java泛型支持
- 轻轻松松写Applications for Windows Mobile
- DNS Server
- 第一个小项目
- Cron, PAM, OpenDNS 介绍
- JSP内置对象详解
- 编程累了,进来欣赏下美女视频,放松下!
- LINQ 首部曲 : LINQ To Object Part 1