B+木の削除・挿入のやり方を図解【データベース】【分かりやすい】

スポンサーリンク

ある程度知識を前提にしていますが、なくてもワンチャンいけます。

スポンサーリンク

削除の解説

葉ノードは省略して簡単な形で書いています。

その1(削除したら空エントリが発生する&「2度手間」も発生するパターン)

具体例を通して解説します。

ここから「200」を削除するステップを見ていく。

一般論
中身が空のエントリと、空エントリを指すポインタは存在してはいけない。

値の削除に伴って、不要になるポインタ(矢印)も削除する。(青色のバツで表した)
そして、新しく必要になるポインタを青の矢印で表す。

実際に書き直すと、

2度手間になっている部分(根→値「8000」を含むノード→葉 の部分)がある。
半透明の青の矢印で繋げば、2度手間が回避できる。(根→葉 で済む)
つまり、「上から2つ目の8000」が不要になる。

一般論
削除の操作をした際に、このように、2度手間になったエントリ(四角)を省く操作をする

実際に書き直すと、

完成。

おまけ

この時点で上から2番目の「8000」も「2度手間」になっていて、消せそうに思えるが、それはできない。

と書くのは、B+木の定義に反するからだ。

一般論
根(一番上のノード)から葉(最下層のノード)までの距離は一定。

今回なら、
左から一番目と二番目の葉ノードは「根から葉までの距離」が2であり、
左から三番目と四番目の葉ノードは「根から葉までの距離」が1であるので、
定義に反する。

その2(その1と同じだが、再帰的な操作が必要なパターン)

操作が1回でなく、削除や挿入を2回、3回、、、と繰り返すしてB+木が完成するパターンもある。

葉ノード間のポインタは省略した。

「11」と「21」を削除すると、

このままでは、B+木の定義に反する。

一般論
葉ノード以外のノードは値(探索キー)を1つは持つので、ポインタは最低でも2つはもつ。

※B+木のオーダが1の時のみ成り立つ。
「最後に」の部分に少し書いた。

つまり、「赤モコモコ」の部分がないので、定義に反する。

適当に中間ノード(根と葉以外)から値を持ってきてB+木を修正する。
(具体的には、「10」削除。「10」を「20」の位置に挿入。)

色付きの部分を書き直すと、

完了。

その3(削除したら空エントリが発生する&「2度手間」が発生しないパターン)

「500」を削除すると、

❌で値を削除。青矢印でその削除に伴う追加動作を表現。

書き直すと以下のようになる。

完了。

その4(削除しても空エントリが発生しないパターン)

「5000」を削除すると、

完了。

おまけ

もっと簡単に省略できるとしても、削除して空になったセルがない場合は、B+木の構造はそのままです。

このように変形できそうですが、

完成形

ここの「赤モコモコ」が空エントリでないので、この時点で完了しています。

挿入の解説

その1(挿入先が満タンのパターン)

ここに「16」を挿入すると、

挿入先のエントリに3つも値があることになるが、今回はエントリが2つまでしか値を持てないB+木を考えているので、「下のモコモコ」のように分けて考える。(「16」を四角で囲んでいないのは、「とりあえず15と20の上にある値」ってイメージで書いているだけです。)
しかし、「下のモコモコ」に交換すると、

一般論
根(一番上のノード)から葉(最下層のノード)までの距離は一定。

これに反するので、修正すると、

定義を満たすB+木が完成した。

完了。

その2(挿入先に空きがあるパターン)

もうお察しだとは思いますが、

ここに「21」を挿入すると、

完了。

最後に

以上の解説は全て、B+木のオーダはm=1としています。
・m>1の場合も同様
・どの本や記事でもm=1の場合で書いていた
・m=1の方が見やすい
ので、m=1で図解を作りました。

なので、「その2」で出てきた部分は、正確には、↓のようになります。

一般論
葉でも根でもないノードはm個以上の値(探索キー)を持つので、ポインタは最低でもm+1個ある。
一般論
根ノードは1個以上の値(探索キー)を持つので、ポインタは最低でも2つある。

〜〜以下、雑談なので読まなくてokです〜〜
大学のPDFとかIT系の記事は既にありました(2022/8)が、内容・表現が近いものが多く、「それはさっきの記事で読んだけど、そこじゃない部分が見たいんだよな〜」って感じだったり、参考書を見ても「ん〜、厳密すぎて分かりにくいな〜」って感じだったので、思い切って前提知識を飛ばして尖った記事にしてみました。デカい会社とかじゃないブログならではかなって。映像なら分かりやすいかもなんですけど、ちゃんと詳しい系だと2時間の講義とかだったので、自分のみたい部分探すの億劫ですよね。

コメント

タイトルとURLをコピーしました