多方向探索木Bツリー

BツリーとB +ツリー


通常のツリーでは、ノードは1つの要素しか格納できません。要素が多い場合は、ツリーの次数が非常に大きいか、ツリーの高さが非常に大きいか、または両方が十分に大きい必要があります。明らかに、アクセス中のメモリアクセスの数は非常に多く、これが時間効率のボトルネックになっています。

定義

多方向探索木(多方向探索木)。各ノードは3つ以上の子を持つことができ、各ノードは複数の要素を格納できます。これは探索木であるため、すべての要素間に特定の並べ替え関係があります。
4つの一般的な特殊な形式:2-3ツリー、2-3-4ツリー、Bツリー、B +ツリー。

2-3木

2-3ツリーの特性ツリーの各ノードには2つまたは3つの子があり、他の目的の子はありません(葉には子がありません)。すべての葉は同じレベルにあります。例:2ノードには1つの要素と2つの子が含まれます。1つの子だけを持つことはできませんが、子を持つことはできません。その中で、左側のサブツリーは要素よりも小さく、右側のサブツリーは要素よりも大きくなります。3ノードには、大きい要素と小さい要素の2つと、子が3つ(子は存在できませんが、他の数の子はありません)が含まれ、左側のサブツリーは小さい要素よりも小さく、中性子ツリーは小さい要素の間にあります。大きな要素の間では、右側のサブツリーが大きな要素よりも大きくなります。

2-3ツリーの複雑さは、新しいノードの挿入と既存のノードの削除にあります。なぜなら、操作後も2-3ツリーが有効であることを確認する必要があるからです。各ノードは2ノードまたは3ノードの場合もあり、すべてのリーフノードが同じレベルにあることを確認する必要があります。
例:2-3ツリー、ノードを挿入します。
ここに画像の説明を挿入
左側の2-3ツリーに3を挿入します。まず、トラバーサルによれば、3は8より小さく4より小さいため、リーフノード1の位置に挿入することしか考えられません。すべてのリーフノードを考慮すると同じレイヤーにある場合、1つの位置が3つのノードになります。

2-3ツリーの3つのノードに要素を挿入する場合、いくつかの状況があります。
ここに画像の説明を挿入
1つは、6と7の3つのノードに5を挿入して、3つのノードを分割し、親が3つのノードになり、5が中間の子になり、7が右の子になるようにすることです。
ここに画像の説明を挿入
2つ目は、親が元々3つのノードであるということです。たとえば、2-3ツリーに11を挿入した場合、親の親にのみ転送できます。12を8の位置に転送して3ノードを形成し、元の親の左の子ツリーが新しい3になります。ノードの中性子ツリー(3ノードの葉が左と右の子になります)と、元の親の残りの大きな要素が新しい3ノードの右サブツリーを形成します。
ここに画像の説明を挿入
3つ目は2-3ツリーに2を挿入することですが、この時点では、ノード1 3、4 6ノード、812ノードはすでに3ノードです。
これは、現在のツリー構造がニーズを満たしていないことを意味し、1つ追加する必要があります。ただし、すべてのリーフノードは同じレイヤーにある必要があります。したがって、ルートノードは次のように変更されます。スプリット13、4 6スプリット、812スプリット。
最終的な写真は右に示されています。1 3分割、2は子ルートノードとして挿入、3は右の子、4 6は分割、4は子ルートノード、2は左の子、6は右のサブツリー、5は6の左の葉です。 、7は右葉です。8は12で分割され、8はルートノード、4は左側のサブツリー、12は右側のサブツリー、10は12の左側のサブツリー、14は12の右側のサブツリーです。分割操作により、ツリー全体が1レベル上に成長します。
効果的な2-3ツリーの特性によれば、ノードの削除も同じ方法で推測できます。

2-3-4木

続く...
Bツリー

おすすめ

転載: blog.csdn.net/beauthy/article/details/105585777