アルゴリズムとプログラミング

基本情報技術者試験平衡2分探索木」の問題

テクノロジ系アルゴリズムとプログラミング難易度:normal
AVL木などの平衡2分探索木を用いる主な目的として最も適切なものはどれか。
ノードを連結するポインタを完全に廃止し全要素を連続したメモリ領域に詰めて格納することでメモリ使用量を大きく削減すること
要素を一切並べ替えず到着順に末尾へ追加し、挿入を必ずO(1)で完了させること
同じ値の重複登録を物理的に禁止し、集合演算の和や積を高速化すること
挿入や削除のたびに木の高さの偏りを抑え、探索を常にO(log n)に近く保つこと
正解
挿入や削除のたびに木の高さの偏りを抑え、探索を常にO(log n)に近く保つこと

AVL木は各ノードで左右部分木の高さの差を一定以下に保つよう回転で再平衡する。これにより木が一方向に偏って高さがnに近づくのを防ぎ、探索・挿入・削除をO(log n)に保てるため正しい。

?選択肢ごとの解説

ア ×ポインタを廃止し連続領域に格納するのは配列の発想であり、ノードをポインタでつなぐ木構造の説明ではない。平衡化の目的とも無関係である。
イ ×並べ替えず末尾へ追加して挿入O(1)にするのはスタックやキューの挙動であり、順序を保ちながら平衡を維持するAVL木の目的とは異なる。
ウ ×重複禁止と集合演算高速化は集合データ型の目的に近く、AVL木が高さの偏りを抑えて探索効率を保つという本来の目的とは別である。
エ ○AVL木は各ノードで左右部分木の高さの差を一定以下に保つよう回転で再平衡する。これにより木が一方向に偏って高さがnに近づくのを防ぎ、探索・挿入・削除をO(log n)に保てるため正しい。

くわしく

単純な2分探索木は挿入順によって一方向に偏り高さがO(n)に劣化しうる。AVL木やB木系は再平衡操作(回転など)で高さをO(log n)に抑え、最悪計算量を保証する。平衡を保つコストと引き換えに探索性能の安定を得る点が要点である。

本番での押さえどころ

試験のコツ

『平衡木=高さの偏りを抑えてO(log n)を保証する木』と一文で押さえる。偏ると最悪O(n)に劣化する点と対で覚える。

覚え方

AVLは『天秤(バランス)を取り続ける木』。傾いたら回転で水平に戻す、と天秤でイメージする。

よくある誤り

平衡木の目的を『メモリ削減』や『挿入を速くするだけ』と誤解する例がある。狙いは高さの偏り抑制による安定した探索効率である。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0126

【基本情報技術者試験】平衡2分探索木の問題 — 解答・解説|ukamiru 過去問