01
釣り合った BST — 到着順がうまく噛み合った
わかっていること: 純粋な BST モード、回転なし。値は中央から順に届くので、新しい鍵はまだ浅い部分木に落ち、どちらの側も相手より先に伸びません。
かかる費用: h = 3 = ⌈log₂(n + 1)⌉
計算例: 50, 30, 70, 20, 40, 60, 80 → 根は 50、節点 7 個、高さ 3 — ちょうど理想の ⌈log₂(7+1)⌉ = 3 なので、最も深い探索でも比較は 3 回です
この型を開く: 平衡インタラクティブな数学・理科レッスン (ノ◕ヮ◕)ノ*:・゚✧
BST と AVL 木 — 同じ値から、四つの違う木
二分探索木の形を決めるのは、中に入っている値ではなく、値が届いた順番です。そしてその形が、使うときの費用そのものになります。探索も挿入も削除も根から葉まで下りていくので、高さがそのまま代価です。どの型にいるかは二つの問いで決まります。値はすでに並んだ状態で届いたか、そして何かがそれを回して釣り合いに戻しているか。
01
わかっていること: 純粋な BST モード、回転なし。値は中央から順に届くので、新しい鍵はまだ浅い部分木に落ち、どちらの側も相手より先に伸びません。
かかる費用: h = 3 = ⌈log₂(n + 1)⌉
計算例: 50, 30, 70, 20, 40, 60, 80 → 根は 50、節点 7 個、高さ 3 — ちょうど理想の ⌈log₂(7+1)⌉ = 3 なので、最も深い探索でも比較は 3 回です
この型を開く: 平衡02
わかっていること: また純粋な BST モードですが、値は昇順で届きます。どれもすでに入っている値より大きいので、毎回そのまま右へ進みます。
かかる費用: h = n = 7 ⇒ O(n)
計算例: 10, 20, 30, 40, 50, 60, 70 → 根は 10、節点 7 個、高さは 3 ではなく 7。70 を見つけるのに比較 7 回かかり、この道具は結果を連結リストと呼びます
この型を開く: 退化03
わかっていること: AVL モード。挿入ごとに根へ向かって戻り、二つの部分木の高さの差が 1 を超えた最初の節点を回します。節点の横の印は、左の高さから右の高さを引いた値です。
かかる費用: |hL − hR| > 1 → ↻, h = 3
計算例: AVL モードで 30, 20, 10, 25, 35, 40 → 10 を入れると節点 30 が +2 に傾き、右回転が 20 をその位置へ持ち上げます。後から入る 40 はある節点を −2 に傾け、左回転が直します。回転 2 回、節点 6 個、高さ 3。
この型を開く: AVL再平衡04
わかっていること: AVL モードに、二つ前の型で鎖を作ったのとまったく同じ値を流し込みます。挿入はいつも右端に落ち、どこかの先祖の釣り合いを −2 に押すので、ほぼ毎回直しが起きます。
かかる費用: ↻ × 4 ⇒ h = 3 < 7
計算例: AVL モードで 10, 20, 30, 40, 50, 60, 70 → 左回転 4 回、根は 10 ではなく 40 になります。高さは 7 ではなく 3 — 同じ入力、同じ七つの節点で、深さは半分未満です。
この型を開く: 並んだ入力をAVLへ7つのノードと高さ7の木。平衡木であれば高さは3になるはずである。入力が何を引き起こしたのか、そして大規模化した際にそれがどれほどのコストになるかを解き明かせ。
デフォルトのキーは 10, 20, 30, … とすでにソートされている。挿入ルールに従うと、新しいキーは常に木の中のどの要素よりも大きいため、毎回右の子へと挿入される。
その結果、分岐はまったく生じない。各ノードは子を1つしか持たないため、この構造はたまたま木として描画された連結リストにすぎず、高さはノード数と等しくなる。
7つのノードに対する可能な限り最善の高さは3である。高さ h の木が保持できるノード数は最大で 2ʰ − 1 個であり、2³ − 1 = 7 と一致するからである。平衡な状態が可能であったにもかかわらず、この入力は最悪のケースを実現している。
探索は根から辿るため、そのコストは高さそのものとなる。ここでは理想的な3回に対して7回の比較を要する。
本質はこの比率にあり、規模が大きくなるほど影響は拡大する。ノード数が100万の場合、平衡木の高さは20であるのに対し、ソート済み入力での高さは100万となる。
解答
ツールは、高さ 7(ノード数 7、理想値 3)と出力する。教訓は、O(log n) は決して二分探索木自体の性質ではない ということである。それは挿入順序の性質であり、プログラマーが与える最も自然な順序であるソート済みデータこそが、まさにそれを破壊する。これこそが AVL 木や赤黒木が存在する全体の理由である。これらは挿入ごとに1、2回の回転コストを支払うことで、その保証を無条件のものにする。モードを AVL に切り替えれば、同じ7つのキーが高さ 3 に収まる様子を確認できる。