2-3木2-3木(2-3き、英: 2-3 tree)とは計算機科学におけるデータ構造で特に平衡木(balanced tree)に属する木構造の一種である。 定義2-3木は後述する様に要素の持ち方に関して文献によって違いがあるが、共通する定義として、
という木構造である。2-3木は特に要素の持ち方に関しては文献によって違いがあり、大きく分けて二つのパターンがある。一つは全ての葉は一つだけ要素を持ち、内部ノードのキーは要素とならない(すなわち全ての要素は葉に格納される)パターンである。もう一つは内部ノードのキー自体が要素であり、葉も2つの要素を持つことができるパターンである。後者のパターンは特にオーダーを 3にしたB木の操作と同様であり、このパターンを指して2分B木(BB木; Binary B-tree)という呼び方をすることもある。この項でも便宜上、2-3木と呼ぶ場合は主に前者のパターンを指し、後者のパターンはBB木と呼ぶことにする。なお前者のパターンの2-3木の場合、内部ノードのキーと一致した場合はどの子供を検索するかを、あらかじめ決めておく必要がある(以降のパターンでは同じ値の場合、より右の子供を検索するとする)。
操作検索2-3木の検索は以下のように行われる。
BB木の場合はこれに、内部ノードのキーに一致した場合に検索成功として返す処理が加わる。2-3木は根から葉までの距離が全て等しいため、要素数を N とすると検索に要する実行時間 2-3木、BB木共に O (log N) に比例する。2分探索木と異なりこの時間は、データの順序によって劣化することはない。 挿入挿入の操作は2-3木の場合は具体的には以下のようになる。
BB木の場合も同様にまず葉の部分に追加要素を追加する。追加する位置にすでに要素が2つにある場合は中央値をとり、それを親とする2ノードを形成し、根から葉の全ての距離が一致するように親の分割と、回転を行うことで実装される(詳しくはB木を参照)。 削除削除の処理は2-3木とBB木でかなり異なる。2-3木の場合は以下の様になる
BB木の場合はまず、削除値を削除して、2-3木の条件を満たすかを判断する。もし削除値が2つの要素をもつ葉なら、その値を削除するだけでよい。それ以外の場合は削除後に親との中央値を算出し、もし子供が足りなくなったら親の兄弟と併合を繰り返すことで実装される。 参考文献
関連項目 |
Portal di Ensiklopedia Dunia