B树,B-,B+,B* 各种树


最近群里有人问树.赶紧回头看了看大学的知识.感觉ACM没白得奖.回头捡起来也好捡.

这是数据结构/算法的东西了.科班出身的肯定都学过,没学过的那你可以拍大腿了.因为你学费白他么交了.哈哈哈


树和算法的作用:有人说:你这算法有个JB用,项目也用不到.我呵呵.我想说,如果你看一本书,没有目录,

你肯定会骂他,我***你****.老子想找个啥东西还得让老子挨页翻啊.对咯,算法和树,就是这个目录.


先普及一下知识:

根节点:就是树根,就一个,树杈子啥的,都是树根长出来的.

叶子节点:叶子节点就是最终的节点,叶子后面就是空气,就是啥也没有.

叉子节点: 这个是我自己起的...哈哈哈,不是根节点不是叶子节点,我就管它叫叉子节点

子节点:这个不好说了,就是根长出岔子,岔子节点就是根节点的子节点,岔子长叶子,叶子就是岔子的子节点.


二叉树:对,就是最多只有两个叉的树.真特么简单...哈哈哈,你肯定深深鄙视了我,但是就是这么简单


BST 二叉搜索树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;

你想找个东西顺藤摸瓜就好


B树= B-:多路搜索树(并不一定是二叉的),别看个减号就觉得它简单些,这个就高端了,因为B树每个节点一个关键字.

注: B树就是B-树    因为B树  英文对应  B-Tree

      B树与BST的差别就是 B树好多叉,好多节点   为啥? 因为找节点是磁盘IO, 磁盘IO慢, 对比节点大小是内存对比,快的很.为了减少磁盘IO次数


例子:B-树每个节点可以好几个关键字,假如B-树根节点是三个关键字 7    77   777  ,那它就会分四个叉,第一个叉小于7,第二个叉

7-77之间.第三个第四个你就应该懂了,每个叉里面还扔进去三个关键字.建成一个树按此规律排列就好.


B-树的特性:

       1.关键字集合分布在整颗树中;

       2.任何一个关键字出现且只出现在一个结点中;

       3.搜索有可能在非叶子结点结束;

       4.其搜索性能等价于在关键字全集内做一次二分查找;

       5.自动层次控制;


B+树:B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点

中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;


例子:有点难懂,就是排列规律和B-树相似,B-树没有重复的数字,但是B+有.B+每一个叉都会包含上一个节点的某个数字.

假如B+根节点是7  77  777  也分四个叉,第一个叉小于等于7(因为7==7,故7在叉上),第二个数大于7,小于等于77(77在叉上)

小于等于7的那个叉(也就是第一个叉)假如是3 5 7  ,3再分叉就是小于等于3(3在叉里),再分到不能分了,就是子节点了.树最左面的枝是:

根节点:7   77   777   最左面第一层叉: 3   5  7,最左面第二层叉: 1 2 3.

你肯定问:卧槽,这么麻烦,要它何用,这样的好处就是所有的数据都在叶子节点上,树杈子只作为索引.这样减少了叉子的体积.   


   B+的特性:

       1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好

是有序的;

       2.不可能在非叶子结点命中;

       3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储

(关键字)数据的数据层;

       4.更适合文件索引系统;



B*:在B+树基础上,为叉子结点也增加链表指针,将结点的最低利用率1/2提高到2/3

就是B+只能顺着往下找到叶子节点才算完,不能找树杈子的兄弟.现在能找树杈子的兄弟节点了,好处是,一个叉子节点满了,

再加内容的话,直接可以加在兄弟叉子上.所以,B*树分配新结点的概率比B+树要低,空间使用率更高;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值