(3)B-树
from:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.3.2.1.htm
当查找的文件较大,且存放在磁盘等直接存取设备中时,为了减少查找过程中对磁盘的读写次数,提高查找效率,基于直接存取设备的读写操作以"页"为单位的特征。
1972年R.Bayer和E.M.McCreight提出了一种称之为B-树的多路平衡查找树。它适合在磁盘等直接存取设备上组织动态的查找表。
1.定义
一棵m(m≥3)阶的B-树是满足如下性质的m叉树:
(1)每个结点至少包含下列数据域:
(j,P0,Kl,P1,K2,…,Ki,Pi)
其中:
j为关键字总数
Ki(1≤i≤j)是关键字,关键字序列递增有序:K1 <K2<…<Ki。
Pi(0≤i≤j)是孩子指针。对于叶结点,每个Pi为空指针。
(2)所有叶子是在同一层上,叶子的层数为树的高度h。
(3)每个非根结点中所包含的关键字个数j满足: 。即每个非根结点至少应有 个关键字,至多有m-1个关键字。
(4)若树非空,则根至少有1个关键字,故若根不是叶子,则它至少有2棵子树。根至多有m-1个关键字,故至多有m棵子树。
注意:
(1) 每个节点的结构是n个指向子节点的指针和n个key,其中的n在节点中有记录。
(2) 对于磁盘上一棵较大的B-树,通常每个结点拥有的孩子数目(即结点的度数)m为50至2000不等。
(3) 一棵度为m的B-树称为m阶B-树。
(4) 选取较大的结点度数可降低树的高度,以及减少查找任意关键字所需的磁盘访问次数。
B-树的查找:有两个基本步骤:
①在B-树中查找结点,该查找涉及读盘DiskRead操作,属外查找;(在B-树中找节点,要求高度越小越好)
②在结点内查找,该查找属内查找。(在节点中找关键字,顺序查找或者折半查找)
查找操作的时间为:
①外查找的读盘次数不超过树高h,故其时间是O(h);
②内查找中,每个结点内的关键字数目keynum<m(m是B-树的阶数),故其时间为O(nh)。
注意:
①实际上外查找时间可能远远大于内查找时间。
②B-树作为数据库文件时,打开文件之后就必须将根结点读人内存,而直至文件关闭之前,此根一直驻留在内存中,故查找时可以不计读入根结点的时间。
程序略。
(4)B+树
应文件系统的需要对B-树的变形。
与B-树的差异在于:
a. 有n棵子树的节点中包含n个关键字。
b. 所有的叶子节点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子节点本身依关键字的大小自小而大顺序连接。
c. 所有的非终端节点可以看成是索引部分,节点中仅含有其子树(根结点)中的最大(或最小)关键字。
分享到:
相关推荐
数据结构ADT动态查找表 动态查找表的特点和抽象数据类型ADT DynamicSearchTable 存储结构定义、 算法设计
数据结构 抽象数据类型 动态查找表 C语言
数据结构 报告 动态查找表用二叉平衡树结构的实验
折半查找算法 顺序表 数据结构顺序表查找(C语言版)
数据结构,静态查找表,C语言开发,界面友好,绝对有价值!!!
实验目的或任务 通过指导学生上机实践,对常用数据结构的基本概念及其不同的实现方法的理论得到 进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所体会。 2. 实验教学基本要求 1.了解实验目的及实验...
合肥工业大学数据结构 查找实验 编写算法实现下列问题的求解。 (1) 对下列数据表,分别采用二分查找算法实现查找,给出查找过程依次所比较的元素,并以二分查找的判定树来解释。 (2) 设计出在二叉排序树中插入结点的...
这个代码,很好,是对的!大家快来下载,很少分就可以解决你的问题!
当年我做的数据结构课内大实验——动态查找表,实现了 二叉排序树 平衡二叉树 B_树 2-3树 B+树
数据结构查找技术
数据结构折半查找,用于C语言版的数据结构。
数据结构课程设计--动态查找表 用二叉排序树实现动态查找表的虚拟数据类型
数据结构习题---折半查找代码 void BinInsert(int A[],int &n,int item) { int j,low=1,high=n,mid; while(low) { /* 利用折半查找法查找合适位置*/ mid=(low+high)/2; /* 计算当前查找部分的中间位置*/ if...
广东工业大学数据结构的动态查找表报告及代码
非常棒的数据结构程序演示 ,分为Pascal语言和C语言版,其中包含 顺序表 广义表 动态查找 静态查找 二叉树 链表 栈 串 稀疏矩阵 储存管理 内部排序 外部排序等等 只需解压即可
2、对线性表进行折半查找时,要求线性表必须()。 3、设哈希表L长m=14,哈希函数H(key)=key%11,表中已...... ........ 五、设有3阶B-树如下,画出删除关键字值17的过程。 六、设哈希函数H(key)=key%...
2、熟练掌握顺序表的查找方法和有序顺序表的折半查找算法以及静态查找树的构造方法和查找算法。 3、掌握二叉排序树的生成、插入、删除、输出运算。 二、实验内容 1、有序顺序表的二分查找的递归算法
哈希表的设计与实现——链地址法 ...(2)从文件中读取各记录,分别以电话号码和用户名为关键字建立不同的哈希表; (3)采用链地址法解决冲突; (4)查找并显示给定电话号码的记录; (5)查找并显示给定用户名的记录。
数据结构查找 主要为顺序查找和折半查找的具采用c++语言实现
数据结构查找实验代码 (1) 对下列数据表,分别采用二分查找算法实现查找,给出查找过程依次所比较的元素(的下标),并以二分查找的判定树来解释。 第一组测试数据: 数据表为 (1,2,3,4,6,7,8,9,10,11,12,13,17,18,...