AVL木

From Wikipedia, the free encyclopedia

AVL木の例
AVL木の例

AVL木(えーぶいえるき、AVL tree、Adelson-Velskii and Landis' tree)とは、コンピュータサイエンスにおいて、「どのノードの左右部分木高さの差も1以下」という条件を満たす二分探索木のことである。

平衡二分探索木の1つで、木に対する操作によって条件を満たさないノードが発生しても、回転と呼ばれる操作を行うだけで木をAVL木に再構成でき、平衡を維持できる。

AVL木は最初に考案された平衡二分探索木であり、その名は1962年に論文を発表したソ連の2人の数学者、ゲオルギー・アデルソン・ヴェルスキー英語版エフゲニー・ランディス英語版に由来する。

通常の二分探索木は入力されるデータの順番によって木の構成が変わるため、探索効率が安定しない。例えば、データがソートされた状態で順に入力されると、木は線形リストと等価な構造になるため、探索の計算量は最悪のになってしまう。木が完全二分木であれば計算量は最良のになるが、完全二分木でなくとも木全体の高さがより小さくバランスが取れている状態、すなわち平衡な状態であれば木の性能は十分発揮できる。AVL木は「どのノードの左右部分木の高さの差も1以下」であることを平衡の条件としており、これを常に満たすので、探索の計算量は常に程度になる。

平衡係数

AVL木では、1つのデータを挿入、削除する度に全てのノードが条件を満たしているか調べる。ここでは、その手がかりとして各ノードに平衡係数を持たせることを考える。平衡係数は以下のように各ノードの左右部分木の高さの差で定義する(左右は逆でもよい)。

(平衡係数) = (左部分木の高さ) - (右部分木の高さ)

平衡係数は挿入や削除などの操作の度に再計算する。すなわち、左部分木の方が高くなるほど+1、右部分木の方が高くなるほど-1すればよい。

平衡係数が2以上または-2以下のノードが存在する時、木の再構成が必要である。再構成後は平衡係数を更新する。

操作

特徴

関連項目

Related Articles

Wikiwand AI