平衡木とは?木の左右の高さをそろえて検索をいつも速く保つしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

平衡木とは(全体像)

平衡木は、木の左右の高さをそろえて、検索の速さを保つ木構造のこと。ふつうの2分探索木を「整えたもの」だと考えるとよい。

2分探索木は、左に小さい値・右に大きい値を置いて、半分ずつしぼって探せるのが利点だ。ところが、たとえば小さい順にデータを入れていくと、右へ右へと一直線に伸びてしまう。こうなると木の利点が消え、先頭からたどるのと同じくO(n)(遅い)になってしまう。

そこで平衡木は、データを入れるたびに形を整えて、左右の高さの差を小さく保つ。これで、どんな入れ方をしても検索はO(log n)(速い)のままになる、というしくみだ。


詳しく:3種類の使い分けだけ覚えれば戦える

ここが記事の心臓部。平衡木の中身は、次の表に全部つまっている。`O(log n)`は「データが増えても、ほんの少しずつしか時間が増えない速さ」だと思えばよい。

平衡木の3種類

種類平衡のきびしさ得意なことおもな使われ方
AVL木きっちり(高さ差≦1)検索が速い検索を重視する場面
赤黒木ゆるめ挿入・削除が速いプログラム言語の標準ライブラリなど汎用
B木多分岐(枝が多い)まとめて読み書きデータベースのインデックス・ファイルシステム

3種類はどれも「検索O(log n)を保証する」点は同じで、平衡のきびしさと得意分野が違う

つまり、「検索重視ならAVL・出し入れ重視なら赤黒木・データベースならB木」という対応で押さえると整理しやすい、というわけだね。

わかりやすく言い換えると

要するに、平衡木は「かたよらないように整えた木」だ。

AVL木 … きっちり整える優等生(検索が速い)

赤黒木 … ほどよく整える効率派(出し入れが速い)

B木 … 枝をたくさん持つまとめ役(データベース向き)

2分探索木をそのまま使うと、かたよって遅くなることがある。それを整えて速さを守るのが平衡木、と覚えるとよい。


試験のツボ

🔴 一番出る:平衡木は検索O(log n)を保証する

①2分探索木はかたよるとO(n)になることがある

②平衡木は高さを整えてO(log n)を保つ

🔴 次に出る:AVL木と赤黒木の違い

①AVL木はきっちり平衡で検索が速い

②赤黒木はゆるい平衡で出し入れが速い

🟡 押さえると安定:B木の用途

①B木は枝分かれが多い(多分岐)

②データベースのインデックスやファイルシステムで使う


よくある間違い

「2分探索木は平衡木と同じもの」→ ✗  2分探索木はかたよることがある。高さを整えて速さを保証するのが平衡木。

「AVL木と赤黒木はまったく同じもの」→ ✗  平衡のきびしさが違う。AVLはきっちり、赤黒木はゆるめ。

「B木は枝が必ず2本までの木」→ ✗  B木は枝を3本以上持てる多分岐の木。だから枝が2本までとは限らない。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(平衡木の役割)

📝 オリジナル問題 1 平衡木の役割

平衡木の役割に関する次の記述のうち、正しいものはどれか。

  1. 平衡木はわざとデータをかたよらせ、検索をO(n)に近づけてしまうためのしくみのことだ
  2. 平衡木は左右の高さを整えて、検索の速さをO(log n)に保つための木構造だ
  3. 平衡木は2分探索木と同じもので、かたよっても速さは変わらないとされる
  4. 平衡木はデータの並びを記録せず、要素を検索することはできないものだ
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

平衡木は左右の高さを整えて、検索をO(log n)に保つ木なんだ。2分探索木はかたよるとO(n)になることがあるけど、平衡木はそれを防ぐよ。

選択肢1の「わざと遅くする」、選択肢3の「BSTと同じ」、選択肢4の「検索できない」はどれも誤りだよ。

選択肢判定理由
1速さを保つための木
2高さを整えてO(log n)を保つ
3BSTはかたよると遅くなる
4検索のための木

オリジナル問題2(AVL木と赤黒木)

📝 オリジナル問題 2 AVL木と赤黒木の違い

AVL木と赤黒木に関する次の記述のうち、正しいものはどれか。

  1. AVL木はきっちり平衡で検索が速く、赤黒木はゆるい平衡で出し入れが速い
  2. AVL木はゆるい平衡で出し入れが速く、赤黒木はきっちり平衡で検索が速い
  3. AVL木も赤黒木もまったく平衡を取らないので、どちらも検索はO(n)で遅くなる
  4. AVL木と赤黒木は平衡のきびしさも用途も同じで、両者にはなんの違いもない
オーエスペン
オーエスペン 解答・解説

解答は 1 だよ。

AVL木はきっちり平衡で検索が速い、赤黒木はゆるい平衡で出し入れが速いんだ。どちらも検索はO(log n)を保つけど、平衡のきびしさが違うよ。

選択肢2はAVLと赤黒木が逆。選択肢3の「平衡を取らない」、選択肢4の「違いがない」も誤りだよ。

選択肢判定理由
1AVL=検索重視・赤黒木=出し入れ重視
2AVLと赤黒木が逆
3どちらも平衡を取る
4平衡のきびしさが違う

オリジナル問題3(B木の用途)

📝 オリジナル問題 3 B木の用途

B木に関する次の記述のうち、正しいものはどれか。

  1. B木は枝が必ず2本までの木で、データベースではいっさい使われないとされている
  2. B木は平衡を取らない木なので、検索はかならずO(n)になってしまう木だ
  3. B木は枝を3本以上持てる多分岐の木で、データベースのインデックスで活躍する
  4. B木は枝分かれを持たない一直線の構造で、ファイルシステムには向かない
オーエスペン
オーエスペン 解答・解説

解答は 3 だよ。

B木は枝を3本以上持てる多分岐の木で、まとめて読み書きできるからデータベースのインデックスやファイルシステムで活躍するんだ。

選択肢1の「2本まで・DBで使わない」、選択肢2の「O(n)」、選択肢4の「一直線」はどれも誤りだよ。

選択肢判定理由
1多分岐でDBで使われる
2平衡木なのでO(log n)
3多分岐でDBインデックス向き
4枝分かれの多い木

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る