本帖最后由 上海分校-小影 于 2018-5-4 09:33 编辑
与一个结点两个分支的二叉树(又叫二元树)相比,B-tree利用多个分支(称为子树)的结点,减少获取记录时所经历的结点数,从而达到节省存取时间的 目的。B-树的查找很简单,是二叉排序树的扩展,二叉排序树是二路查找,B-树是多路查找,可以减少访问硬盘次数为目的,是一种平衡多路查找树.
B-Tree就是我们常说的B树,一定不要读成B减树,否则就很丢人了。B树这种数据结构常常用于实现数据库索引,因为它的查找效率比较高。
这里的B并不是binary的意思,而是balance(平衡树又称平衡多路查找树)的意思。
图示比较:
1.二叉树数据结构
2. B-tree数据结构
在mysql数据库中,用到的数据结构是——B-Tree B-tree平均比较次数logN
logN就是采用了分治发进行形式 (二分法,三分法,四分法) 具体的2,3,4对于整个复杂度的影响是很小的,只是差了一个常数系,所以都归为一类 m阶的B-tree特点:
树种每个节点最多m个孩子,
除根节点和叶子节点外,至少两个孩子。
如果根节点不是叶子节点,则至少两个孩子。
所有叶子节点都出现在同一层,叶子节点不包含任何关键字信息
每个非终端结点中包含有n个关键字信息: (n,P0,K1,P1,K2,P2,……,Kn,Pn)。其中:
a) Ki (i=1…n)为关键字,且关键字按顺序排序K(i-1)< Ki。
b) Pi为指向子树根的接点,且指针P(i-1)指向子树种所有结点的关键字均小于Ki,但都大于K(i-1)。
c) 关键字的个数n必须满足: ceil(m / 2)-1 <= n <= m-1。
相关扩展:
B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于 走右结点; B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键 字范围的子结点; 所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中; B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点 中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中; B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率 从1/2提高到2/3;
|