这一篇首先会说说前面剩余的一点知识2-3树,然后简单说说B树,不写代码,只是简单看看原理吧!
为什么要说一下2-3树呢?了解2-3树之后能更快的了解B树;
1.简单看看2-3树
其实我们学过了前面的2-3-4树之后,再看2-3树就太容易了,2-3树中任意一个节点最多只有三个子节点,而且节点中只有两个空位置可以存数据;除了分裂,其他的都和2-3-4树一样的,就不多说了,下面我们就随意看看节点分裂吧!
首先要区分2-3-4树和2-3树分裂的的不同,对于2-3-4树来说是插入数据之前首先会把满的叶节点分裂,把三个数据分配完了之后再插入数据到节点中;而对于2-3树来说,是在插入期间,什么是插入期间呢?看看下图:
上图中的操作的目的就是向2-3树中插入85,插入的时候会判断该叶节点是不是满的,假如是满的 ,首先就80、90、85进行从小到大排列 为80、85、90,然后80不动,中间的数据放进父节点中,最后将90放入新创建的节点当中,就ok了;这里假如85在进入父节点的时候发现父节点满了,那么父节点就会分裂,这里跟2-3-4树差不多,重复上述步骤,左边数据不动,将中间值放入父节点,右边数据放入新建节点;说起来很绕,请看下图:
其实没什么新的东西,弄懂了2-3-4树,再看2-3树几分钟就差不多了,这里也就是随意看看,有兴趣的可以用代码实现一下,这里就是注意一下2-3树和2-3-4树分裂过程的不同就可以了;
2.硬盘存储数据
我们前面说的所有数据结构都是存在于内存中的,当电脑一关机内存就会全部释放,所有的数据结构都会消失;但是有没有想过硬盘中是怎么存数据的啊?
于是就有了B树,属于一种多叉树,在外部存储器存数据的时候起很大的作用,外部存储暂时就理解为硬盘即可!话说数据为什么要存到硬盘中呢?最大的有点就是硬盘便宜,而且硬盘空间比内存大得多,可以存很多很多的数据,而且硬盘最大的优点就是可以持久化,就是电脑即使关机了,数据还是存在硬盘中不会消失;
但是存在硬盘中有个很大的问题,就是从硬盘中读取数据的时候太慢太慢了,而从内存中读取数据的速度大概比硬盘读取快几万倍,相差一个数量级;其实对于cpu的运算速度来说从内存中读数据还是太慢了,于是就有了缓存,后面有机会再说......
虽然每年硬盘技术都在提高,但是内存技术提高的更快,可以想象内存和硬盘的速度只会越来越大!