什么是m叉树_漫画:什么是B-树?

0b18e5d12a85429448e0f849e53be587.png

890e18c63bc0d39932a66a4a6ff3b561.png

f13137d4759763c16829008590792155.png

3c603dea948e0095ff5273c02fc9d3b3.png

————————————

25597ba335a8097d69e55ee9b4965c49.png

ed5f0f228d198021f86e8d7c86a5ed5d.png

9ac60332a358b9b90cb58fc99047e9b2.png

4762f907e2d60a2d740384145704b839.png

b0b090cab9c4cd34f5aae2546f997959.png

ddd46a28414a7c2e0107028f285583c0.png

48ab9b1b5097b56e4519e7f123ea227c.png

042e9ad6c135a68d5f3d36d66b3a1a76.png

f34e8cb56665179d8726a5363d321089.png

————————————

1dc192a90106d89ad890526cefd71f43.png

dea1b12acf6b88948f25f468effae7b0.png

2a9b600b7039f2178a9ba450e0e4964b.png

911052cca7d08465b90835de170914c5.png

01b4b9b90a0e8010753c1f22a5a5f882.png

6c691724749666848f7eb6781ddc052c.png

48fb1174a79eeedcb67843db8a27c272.png

919363fa4435480005bdb1afaae8b532.png

9c034d387af289b137aeb6eab59d7719.png

2c40e9e8488e7e5dde5d1cab8b1a6ca1.png

82d248747bcdd6f8ba6200a0ea1ad782.png

28bb9ecfe050302c7331e1b34c1881f5.png

f6a9ca1cfec1b13b251a02efabdc7823.png

336099bf530de09c6a52f4097889accb.png

二叉查找树的结构:

a4616932bca2c11b235ed1847ebe464d.png

第1次磁盘IO:

bbaa78c944ba5a147a5253007faeb13f.png

第2次磁盘IO:

13dd11c835eaa5744971ff6535cb7c8b.png

第3次磁盘IO:

2dcf00cc23dcff5ad2a540d967ba06f0.png

第4次磁盘IO:

8867460081ebe924977a41ecf4ef6a98.png

ac79485f754183a38658a8fbcbf5fa36.png

fae35dc73176490e2692672256a04e82.png

d4bcd67bbdaa2ce3fd3a8d3e75442eeb.png

4bafb69741abca64887e3b7f7f23da7e.png

下面来具体介绍一下B-树(Balance Tree),一个m阶的B树具有如下几个特征:

1.根结点至少有两个子女。

2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m

3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m

4.所有的叶子结点都位于同一层。

5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

c5fd9371d403678440d109c8775712da.png

826a4c84e6993dcaa946d1df4c055d1b.png

b9bbc7df962de38bf84ceab8ef11988f.png

0f083aa06ba31a7e185b185a528f5e4f.png

c372067c5ac29a2f4ed297aa041e0e5a.png

0d5f0f33da9d1cd3e3e43cf44536a6b2.png

38329b2f1062eee439c70dee8601a513.png

第1次磁盘IO:

7485f76f0f93a06998abb849202a2c2d.png

在内存中定位(和9比较):

03ed8d33c70846f48b50c6136f67a1d8.png

第2次磁盘IO:

0a00ece02c6703011045074b376d41db.png

在内存中定位(和2,6比较):

3e0ee741234f1dea4d20c9bf9dbd4837.png

第3次磁盘IO:

ad1ee4cd661fd4af1dcf64f273a1ecd4.png

在内存中定位(和3,5比较):

933d144e9eaeef4043b81d6f80e4b3f5.png

e6828cc04202b617acc6bf4e77d70bf1.png

04bd77e17968065e5ddb28dff4a5cf48.png

b0f995e428f1fe4c4ded4c1793a14789.png

6645b655e626d593bcc17f2c3a212687.png

69bd37234ef41973055139f8b47ef0e7.png

自顶向下查找4的节点位置,发现4应当插入到节点元素3,5之间。

c9bfc7036cc06299e0e2029cb33bc334.png

节点3,5已经是两元素节点,无法再增加。父亲节点 2, 6 也是两元素节点,也无法再增加。根节点9是单元素节点,可以升级为两元素节点。于是拆分节点3,5与节点2,6,让根节点9升级为两元素节点4,9。节点6独立为根节点的第二个孩子。

abb4cdc40effe791d8ca17f724ed6369.png

376b6a69d2b2caadff140d00a53224b3.png

e2420f487d43b5a937ddaeb5bbbbca05.png

6679a9365d251827ba8ce6430638bdc4.png

自顶向下查找元素11的节点位置。

db4c1998c7e569c1ec3b3d949e3ff527.png

删除11后,节点12只有一个孩子,不符合B树规范。因此找出12,13,15三个节点的中位数13,取代节点12,而节点12自身下移成为第一个孩子。(这个过程称为左旋

de5301c8e14671c62d956b035bba56cf.png

2f1ac77237b467d8bae9fe5753a7821c.png

c8edb2b633d0c65239dc726d3cd83429.png

9af8842fbf1326ffc0a6715f7d0d8ff0.png

b7f2e1b9923f6ca7fd419d76635af190.png

6fc59736c21d070cd9b3f20a4c91544a.png

—————END—————

喜欢本文的朋友们,欢迎长按下图关注订阅号程序员小灰,收看更多精彩内容

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值