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 ...
随机推荐
- Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH
Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队 ...
- 在CentOS下面编译WizNote Qt Project
编译环境 CentOS 64位 Desktop 版本:6.5 编译前的准备: CentOS的用户默认没有root权限,如果当前用户没有权限root,则可以在终端里面执行下面的命令: su root s ...
- hadoop中的ssh无密码登录配置
在配置Hadoop集群分布时,要使用SSH免密码登录,假设现在有两台机器hadoop@Master(192.168.1.101),作为Master机,hadoop@Slave(192.168.1.10 ...
- lua简化cocos2dx的Action动画序列
情景 今天写代码时,又要写一个很常见的动画,就是变大变小模拟那个弹性的赶脚,很常用但写起来挺麻烦,封装一下用起来就简单多了. 当然我也知道有缓动动画(EaseAction)可以实现反弹效果,但这不是重 ...
- PHP高级特性二之文件处理
PHP中的文件处理也是一个相当重要的模块,这一篇的主要内容就是PHP中文件系统的简介. 文件系统用途 1. 项目处理都离不开文件处理 2. 可以用文件长时间保存数据 3. 建立缓存,在服务器中进行文件 ...
- ftrace的使用【转】
转自:http://blog.csdn.net/cybertan/article/details/8258394 This article explains how to set up ftrace ...
- 《大道至简-Team》
已经学习了<大道至简>两章,我们了解了编程的本质和“懒人”造就了方法.书中没有提供给我们编程的技巧,捷径,而是从别的方面为我们讲解了编程的精义.第三章就为我们引入了“团队”这个概念. 我们 ...
- 甲骨文推出MySQL Fabric,简化MySQL的高可用性与可扩展性
北京,2014年5月28日——为了满足当下对Web及云应用需求,甲骨文宣布推出MySQL Fabric.MySQL Fabric是一款可简化管理MySQL数据库群的整合式系统.该产品通过故障检测和故障 ...
- asp数据链接
asp页面的中的数据库连接要进行唯一名称处理,不然页面中多个连接使用时,会出现连接莫名关闭.数据不能写入,但是页面也没报错.asp可以将有数据库连接的地方,提取成单独的函数.在每个方法单独命名数据库连 ...
- 阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-6.repo 参考:htt ...