◆ 2分木、2分探索木
2分木とは、親ノードが子ノードを2つ以下持つ木構造の事です。
イメージ的には横の図です。
これで子ノードが2つ以上だと 多分木 または n分木 と言われるようになります。
親の無いノードを root 子の無いノードを reaf(葉) と言います。
特に要素には、制約みたいなものがなく大小関係など関係なくデータを入れていくようです。
|
|
![](./img/struct_02.gif) |
2分探索木とは、2分木に制約が付いたものです。
各要素は「左の子 < 親 < 右の子」になっておかないといけません。
イメージ的には左の図です。
データの検索を目的にしている木構造で、
ルートから検索を開始し、検索対象の値が要素より大きければ右子ノードへ、
小さければ左子ノードへと検索を繰り返します。
|
◆ B木
B木とは、バランス木の略でデータの効率的な格納に用いられます。
2分探索木の発展型で、主にハードディスクやDBMSなど( Oracle や PostgreSQL などでも)のファイルシステムに使用されています。
特徴的には、左右のノードが対象になるようにソートをし直すという特徴があります。
イメージ的には下の図です。(1つのノードに4つのデータが格納できるという例で)
![](./img/struct_03.gif)
オレンジの部分はポインタの格納領域で、子ノードのポインタアドレスが格納されます。
(出題される可能性あり)
ノード内は必ずソートされて格納されます。
更に追加すると下の様なイメージで再編成をします。
![](./img/struct_04.gif)
データが増えてくると、親ノードのデータも含めてどんどん再編成されていきます。
B木の目的は、子ノードのバランスを取るようにデータ配置を行う事によって、最大探索回数を最小に抑えると言う目的で作られています。
ノード数がnの場合、ノードの高さが O(log2 N) になるのでノードの探索が速くなるという事です。
情報処理試験では、おそらく意味のみで出題されるかも知れません。
◆ ヒープ木
2分探索木と違って、親と子のノードが上下関係になります。
B木と違って、ポインタアドレスなどが不要で、「添字」というもの使用して配列による管理が可能な手法です。
これはアルゴリズムの問題も度々でるので、ソート処理の内容はアルゴリズムの方で記述しようと思います。
イメージ的には横の様な感じです。
ここで気をつけないといけないの事は、葉が必ず左の方から付くという事です。
要は図で言いますと「4」の要素の下に葉がなく、「6」の要素に葉があるという事はありません。
(アルゴリズム編でその辺りを記述しようと思います。)
|
![](./img/struct_05.gif)
|
|