B-树和B+树
B-树和B+树
是一种平衡的多路查找树,它在文件系统中很有用。
一颗m阶的b-树,或为空树,或满足下列特性的m叉树。
1)树中每个节点至多有m棵子树
2)若根结点不是叶子结点,则至少有两棵子树。
3)除根之外的所有非终端结点至少有[m/2]棵子树;
4) 所有的非终端结点中包含下列信息
(n,A0,K1,A1,K2,A2...,Kn,An)
K(i=1,...,n)为关键字,且Ki<Ki+1(i=1,...,n-1);
A为指向根结点的指针。且Ai-1指向树中所有节点的关键字小于Ki(i=1,...,n),
5)所有叶子节点都出现在同一层次上,并且不带信息。
#define m 3 // 3阶
typedef struct BTNode {
int keynum; //关键字个数
struct BTNode * parent; //指向双亲结点
KeyType key[m+1]; //关键字向量
struct BTNode * ptr[m+1]; //子树指针向量
Record * recptr[m+1];
} BTNode,*BTree;
typdef struct {
BTNode *pt;
int i;
int tag;
}Result;
键树(digital search trees)数字查找树
自左向右有序
常见两种存储结构
双链表
#define MAXKEYLEN 16
typedef struct {
char ch[MAXKEYLEN];
int num;
}KeysType;
typedef enum{LEAF, BRACH} NodeKind;
typedef struct DLTNode {
char symbol;
truct DLTNode * next; //指向兄弟的指针
NodeKind kind;
union {
Record * infoptr; //分子结点的记录指针
struct DLTNode * first; //分支节点的孩子链指针
}
}DLTNode,*DLTree;
Record * SearchDltTree(DLTree T, KeysType K) {
p = T->first; i=0;
while (p && i < K.num) {
while (p && p->symbol ! K.ch[i]) p = p->next;
if (p && i<K.num-1) p=p->first;
++i;
}
if (!p) return NULL;
else return p->infoptr;
}
typedef struct TrieNode {
NodeKind kind;
union {
struct {KeyType K; Record* infoptr; } lf; //叶子结点
struct {TrieNode *ptr[27]; int num; } bh; //分支节点
};
}TrieNode,*TrieTree;
Record * SearchTrie(TrieTree T, KeysType K) {
for (p=T, i=0;
p && p->kind == BRANCH && i< K.num;
p = p->bh.ptr[ord(K.ch[i])], ++i); // ord 求字符在字母表中的序号
if (p && p->kind == LEAF && p->lf.K == K )
return p->lf.infoptr;
else return NULL;
}
B-树和B+树的更多相关文章
- wpf 逻辑树与可视化树
XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性.在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树.逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性.事 ...
- 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...
- B树、B+树的实现
B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1) 每个非根节点至少包含t-1个关键字,t个指向子节点的指针:至多包含2t-1个关键字,2t个指向子女的指针 ...
- B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right) 2.所有结点存储一个关键字 3.非叶子节点的左指针指向小于其关键字的字数,右指针指向大于其关键字的字数: 如: B树的 ...
- 人人都是 DBA(VII)B 树和 B+ 树
B 树(B-Tree)是为磁盘等辅助存取设备设计的一种平衡查找树,它实现了以 O(log n) 时间复杂度执行查找.顺序读取.插入和删除操作.由于 B 树和 B 树的变种在降低磁盘 I/O 操作次数方 ...
- 字典树(Trie树)
1. trie基础 (1) 是什么? Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种. (2) 性质 根节点不包含字符,除根节点外每一个节点都只包含一个字符 从根节点到某一节点,路 ...
- (转)B-树、B+树、B*树
B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子:且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: 4. ...
- 从B 树、B+ 树、B* 树谈到R 树
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由 ...
- B树和B+树
当数据量大时,我们如果用二叉树来存储的会导致树的高度太高,从而造成磁盘IO过于频繁,进而导致查询效率下降.因此采用B树来解决大数据存储的问题,很多数据库中都是采用B树或者B+树来进行存储的.其目的就是 ...
- 转 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...
随机推荐
- CF 253B Two Heaps
#include<stdio.h> #include<algorithm> #include<map> using namespace std; struct No ...
- 内存分析_.Net垃圾回收介绍
垃圾回收 1. .Net垃圾回收中涉及的名称 1.1.什么是代? 垃圾回收器为了提升性能使用了代的机制,共分为三代(Gen0.Gen1.Gen2).GC工作机制基于以下假设, 1) 对象 ...
- ./jad: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory
Ubuntu 上使用jad,出现上面错误: ./jad: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot ...
- ThinkPHP:读取数据库数据 (2)
项目配置文件Conf/config.php中添加数据库连接信息: // 添加数据库配置信息 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'loc ...
- Oracle ->> TRUNC, ROUND, CEIL, FLOOR
), ), CEIL(10.01), FLOOR(10.9999) FROM dual; 结果: TRUNC是直接截断小数位 ROUND是四舍五入 CEIL和FLOOR则是和SQL SERVER一样返 ...
- Data Flow ->> OLE Command
这里有篇博客文章是讲这个OLE Command的:http://www.cnblogs.com/tylerdonet/archive/2011/06/20/2085490.html OLE Comma ...
- 如何写计算机会议的rebuttal
其实最好的教材就是实例,恰好NIPS会议会把往年所有论文的Rebuttal都贴出来...,见这里:http://papers.nips.cc/ 同时,圈内同行也总结了不少经验,下面转帖其他人的经验 = ...
- ExtJs布局大全
1.Fit 布局 在Fit 布局中,子元素将自动填满整个父容器.注意:在fit 布局下,对其子元素设置宽度是无效的.如果在fit 布局中放置了多个组件,则只会显示第一个子元素.在Fit 布局中,子元素 ...
- javaScript初学者易错点
大家好,这是我在博客园写的第一篇博文.作为一名前端开发初学者,由于经验不足,水平有限,在做项目的过程中总会遇到这样或那样的问题,每每这时候,我都比较喜欢到博客园这里来寻求解决方案,结果也总是能找到满意 ...
- URL重写案例
实现url重写的基本方法: 将下载的URLRewriter.dll,放到你的web程序的bin下 然后在web.config里配置如下: <?xml version="1.0&quo ...