写在开头:B-树,就是B树。因B树的英文名称为B-tree ,B-树因此而来,有人会误以为B-树是一种树,而B树又是另外一种树。实际上,B-tree就是指的B树

而且B-树不可以读成B减树。。。

一:预备知识:

磁盘I/O:是指磁盘的输入和输出(Input和Output的缩写)。

二叉查找树(Binary Sort Tree),简称BST,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。数据库索引一般使用B树存储,其索引存在磁盘中,利用索引查询时,对于数据量大的索引不可能一次全部加载,只是一次次加载磁盘页,在B树中,每个节点的大小为一个磁盘的页。在大量数据中实现索引查询时 ,树节点存储的元素数量是十分有限的,如果元素数量非常多的话,查找就退化成节点内部的线性查找了,二叉查找树结构会因树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,磁盘查找存取的次数往往由树的高度所决定为了减少树的深度 我们采用多叉树结构

我们通过 减少树的结构尽量减少树的高度, 减少磁盘查找存取的次数  我们就想到了多路查找树。  许多数据库系统都一般使用B树或者B树的各种变形结构。一棵含n个结点的B树的高度为O(lgn)。

B 树又叫平衡多路查找树。它的每一个节点最多包含k个孩子,k便称为B树的阶。k的大小取决于磁盘页的大小。

1.树中每个结点含有最多含有k个孩子,即k满足:ceil(k/2)<=k<=k   (ceil(x)是一个取上限的函数);

2.除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子

3..根节点至少有两个孩子

4..所有叶子结点都出现在同一层

5..每个节点中元素从小到大排列

6..中间的节点有k-1个元素和k个孩子

当单一节点元素很多时,B树在查询时次数不比二叉查找树小,

二:插入:

若要插入4,,自顶向下查找4的节点位置,4应该插在3,5之间,2,6和3,5都是两元素节点,无法增加根节点可以升级为两元素结点,4,9.

以下节点为符合规则也要改变,维持多路平衡。

三:删除

例如,我们要删除11,但是12不可只有一个孩子,我们找出12,13,15中的中位数13作为父节点,12下移成为左孩子。

四:应用:

用于部分数据库索引,文件系统等

什么是B树(B-树)?的更多相关文章

  1. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  2. BZOJ4170 极光(CDQ分治 或 树套树)

    传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...

  3. Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  4. bzoj3262: 陌上花开(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  5. bzoj3295: [Cqoi2011]动态逆序对(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  6. BZOJ 3110 k大数查询 & 树套树

    题意: 有n个位置,每个位置可以看做一个集合,现在要求你实现一个数据结构支持以下功能: 1:在a-b的集合中插入一个数 2:询问a-b集合中所有元素的第k大. SOL: 调得火大! 李建说数据结构题能 ...

  7. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  8. BZOJ 3110 树套树 && 永久化标记

    感觉树套树是个非常高深的数据结构.从来没写过 #include <iostream> #include <cstdio> #include <algorithm> ...

  9. 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组

    涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用.当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟 ...

  10. 学习笔记--函数式线段树(主席树)(动态维护第K极值(树状数组套主席树))

    函数式线段树..资瓷 区间第K极值查询 似乎不过似乎划分树的效率更优于它,但是如果主席树套树状数组后,可以处理动态的第K极值.即资瓷插入删除,划分树则不同- 那么原理也比较易懂: 建造一棵线段树(权值 ...

随机推荐

  1. dbTable

    标签: <my-Double-Table double-Table="doubleTable" head-List="headList" select-M ...

  2. 四探循环依赖 → 当循环依赖遇上 BeanPostProcessor,爱情可能就产生了!

    开心一刻 那天知道她结婚了,我整整一个晚上没睡觉,开了三百公里的车来到她家楼下,缓缓的抽了一支烟...... 天渐渐凉了,响起了鞭炮声,迎亲车队到了,那天披着婚纱的她很美,真的很美! 我跟着迎亲车队开 ...

  3. CobaltStrike逆向学习系列(8):Beacon 结果回传流程分析

    这是[信安成长计划]的第 8 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 接收与处理 0x02 结果回传 Beacon 在接受完命令并执行后,会将数据加密回传给 T ...

  4. [Matlab]三维曲面绘制实例

    [x,y] = meshgrid(-8:0.5:8); z = sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2,2,1); mesh(x,y, ...

  5. 单网口RFC2544测试——信而泰网络测试仪实操

    一.测试拓扑 拓扑说明 测试仪一个端口和DUT一个端口相连 DUT假设是一台交换设备,它能够把测试仪发送的流量直接转发回来 注意:要求DUT必须能够把收到的流量环回出来,否则没有办法测试 二.测试思路 ...

  6. IDEA安装下载以及使用

    IDE 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面等工具.集成了代 ...

  7. C语言memcpy()函数和memmove()函数

    C语言memcpy()函数和memmove()函数 关于 memcpy() 函数,请先看链接. memcpy() 函数和 memmove() 函数的函数原型如下: void* memcpy(void ...

  8. JavaWeb-前端基础

    前端基础 前端:我们网站的页面,包括网站的样式.图片.视频等一切用户可见的内容都是前端的内容. 后端:处理网站的所有数据来源,比如我们之前从数据库中查询数据,而我们查询的数据经过处理最终会被展示到前端 ...

  9. Java课程设计---WindowBuilder插件安装

    1 .获取插件地址 WindowBuilder 地址http://www.eclipse.org/windowbuilder/download.php 打开网址后会看到如下 2.在线方式安装插件 根据 ...

  10. 在pycharm中批量插入表数据、分页原理、cookie和session介绍、django操作cookie

    昨日内容回顾 ajax发送json格式数据 ''' 1. urlencoded 2. form-data 3. json ''' 1. ajax $.ajax({ data: JSON.stringi ...