《算法导论》第18章 B树 个人笔记
来源:互联网 发布:mac触摸板透明 编辑:程序博客网 时间:2024/05/23 01:56
第18章 B树
18.1 B树的定义
一棵B树T是具有以下性质的有根树(根为T.root);
1、 每个结点x有下面属性:
x.n ,当前存储在结点x中的关键字个数x.n 个关键字本身x.key1≤x.key2≤...≤x.keyx.n x.leaf ,一个布尔值,如果x是叶节点,则为TRUE,否则为FALSE
2、每个内部结点x还包含
3、 关键字
4、每个叶节点具有相同的深度,即树的高度h
5、每个结点所包含的关键字个数有上届和下界,用一个被称为B树的最小度数的固定整数
- 除了根结点以外的每个结点必须至少有t-1个关键字。因此,除了根结点以外的每个内部结点至少有t个孩子。如果树非空,根结点至少有一个关键字。
- 每个结点至少可包含2t-1个关键字。因此,一个内部结点至多可有2t个孩子。当一个结点恰好有2t-1个关键字时,则称该结点是满的。
定理:如果
18.2 B树上的基本操作
1、搜索B树
B-TREE-SEARCH(x,k)i = 1while i<=x.n && k > x.key[i] i++if i <= x.n and k = x.key[i] return (x,i)elif x.leaf reurn NILelse DISK-READ(x.c[i]) return B-TREE-SEARCH(x.c[i],k)
2、创建一棵空的B树
B-TREE-CREATE(T)x = ALLOCATE-NODE()x.leaf = TRUEx.n = 0DISK-WRITE(x)T.root = x
3、向B树中插入一个关键字
- 分裂B树中的结点
B-TREE-SPLIT-CHILD(x, i)z = ALLOCATE-NODE()y = x.c[i]z.leaf = y.leafz.n = t-1for j=1 to t-1 z.key[i]=y.key[t+j]if !y.leaf for j=1 to t z.c[j]=y.c[t+j]y.n = t-1for j = x.n+1 downto i+1 x.key[j+1] = x.key[j]x.c[i+1] = zfor j = x.n downto i x.key[j+1] = x.key[j]x.key[i] = y.key[t]x.n++DISK-WRITE(y)DISK-WRITE(z)DISK-WRITE(x)
- 沿树单程下行方式向B树插入关键字
B-TREE-INSERT(T,k)r = T.rootif r.n == 2t-1 s = ALLOCATE-NODE() T.root = s s.leaf = FALSE s.n = 0 s.c = r B-TREE-SPLIT-CHILD(s,1) B-TREE-INSERT-NONFULL(s,k)else B-TREE-INSERT-NONFULL(r,k)B-TREE-INSERT-NONFULL(x,k)i = x.nif x.leaf while i>=1 && k<x.key[i] x.key[i+1] = x.key[i] i-- x.key[i+1] = k x.n++ DISK-WRITE(x)else while i>=1 && k<x.key[i] i-- i++ DISK-READ(x.c[i]) if x.c[i].n = 2t-1 B-TREE-SPLIT-CHILD(x,i) if k > x.key[i] i++ B-TREE-INSERT-NONFULL(x.c[i],k)
阅读全文
0 0
- 《算法导论》第18章 B树 个人笔记
- 算法导论 第18章 B树
- 算法导论-第18章-B树
- 算法导论 第18章 B 树
- 《算法导论》第18章 B树
- 《算法导论》第12章 二叉搜索树 个人笔记
- 《算法导论》第23章 最小生成树 个人笔记
- 《算法导论》第2章 算法基础 个人笔记
- 《算法导论》第16章 贪心算法 个人笔记
- 《算法导论》笔记 第18章 18.1 B树的定义
- 《算法导论》笔记 第18章 18.2 对B树的基本操作
- 《算法导论》笔记 第18章 18.3 从B树中删除关键字
- 算法导论代码 第18章 B树
- 算法导论习题解-第18章B树
- 《算法导论》第4章 分治策略 个人笔记
- 《算法导论》第6章 堆排序 个人笔记
- 《算法导论》第7章 快速排序 个人笔记
- 《算法导论》第8章 线性时间排序 个人笔记
- linux内核系统调用和标准C库函数的关系分析
- 关于Java跨域的总结
- 程序员 挣钱比健康重要
- Error occurred during initialization of VM due to java.nio.charset.IllegalCharsetNameException
- CSS之window的视图属性
- 《算法导论》第18章 B树 个人笔记
- 你真的理解java中的null“类型”吗?
- Android网络请求心路历程
- 【Android】APP_ALLOW_MISSING_DEPS=true 错误
- 禁止viewpager滑动
- 关于define与defined的区别
- monkey学习记录
- Timeout时间已到
- py-faster-rccn问题集中营