Bツリーとバイナリツリーの違い

著者: Laura McKinney
作成日: 2 4月 2021
更新日: 1 5月 2024
Anonim
Bツリーチュートリアル-Bツリーの概要
ビデオ: Bツリーチュートリアル-Bツリーの概要

コンテンツ


Bツリーとバイナリツリーは、非線形データ構造のタイプです。用語は似ているように見えますが、すべての面で異なっています。 RAMのアクセス速度はディスクよりもはるかに速いため、レコードまたはデータがディスクではなくRAMに格納される場合、バイナリツリーが使用されます。一方、Bツリーは、データがディスクに保存されるときに使用され、ツリーの高さを減らし、ノード内のブランチを増やすことでアクセス時間を短縮します。

Bツリーとバイナリツリーのもう1つの違いは、Bツリーにはすべての子ノードが同じレベルになければならないのに対して、バイナリツリーにはそのような制約がないことです。 2進ツリーには最大2つのサブツリーまたはノードを含めることができますが、BツリーではサブツリーまたはノードをM個持つことができます。ここで、MはBツリーの順序です。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

比較の根拠
Bツリー
二分木
本質的な制約ノードは最大M個の子ノードを持つことができます(Mはツリーの順序です)。ノードは最大2つのサブツリーを持つことができます。
中古
データがディスクに保存されるときに使用されます。レコードとデータがRAMに保存されるときに使用されます。
木の高さログM N(mはM-wayツリーの順序)ログ2 N
応用多くのDBMSのコードインデックスデータ構造。コードの最適化、ハフマンコーディングなど


Bツリーの定義

Bツリーは、バランスの取れたMウェイツリーであり、バランスの取れたソートツリーとしても知られています。これは、ノードが順序通りのトラバーサルに基づいて編成されるバイナリ検索ツリーに似ています。 Bツリーのスペースの複雑さはO(n)です。挿入および削除の時間の複雑さはO(log n)です。

Bツリーに当てはまる特定の条件があります。

  • 木の高さは、可能な限り最小でなければなりません。
  • ツリーの葉の上には、空のサブツリーがあってはなりません。
  • 木の葉は同じレベルでなければなりません。
  • すべてのノードには、Leaveノードを除く、最小数の子が必要です。

次数MのBツリーのプロパティ

  • 各ノードには、最大M個の子と最小M / 2個の子、または2から最大の任意の数を含めることができます。
  • 各ノードには、最大M-1キーを持つ子より1つ少ないキーがあります。
  • キーの配列は、ノード内で特定の順序になっています。キーの左側にあるサブツリー内のすべてのキーはキーの先行バージョンであり、キーの右側にあるサブキーは後続バージョンと呼ばれます。
  • フルノードの挿入時に、ツリーは2つの部分に分割され、中央値を持つキーが親ノードに挿入されます。
  • ノードが削除されると、マージ操作が行われます。

二分木の定義

バイナリツリーは、子ノードに対して最大2つのポインタを持つことができるツリー構造です。これは、ノードが持つことができる最高次数が2であり、ゼロまたは1度のノードも存在する可能性があることを意味します。

厳密な二分木、完全な二分木、拡張二分木など、二分木の特定の変形があります。

  • 厳密な二分木は、各非終端ノードが左サブツリーと右サブツリーを持たなければならないツリーです。
  • ツリーは、2つの条件を満たした場合、完全なバイナリツリーと呼ばれます。 各レベルのノード(iはレベル)。
  • スレッドバイナリは、0個のノードまたは2個のノードで構成されるバイナリツリーです。

トラバーサルテクニック

ツリートラバーサルは、ツリーデータ構造で実行される最も頻繁な操作の1つであり、各ノードが体系的に1回だけアクセスします。


  • 順序-このツリートラバーサルでは、左側のサブツリーが再帰的に訪問され、次にルートノードが訪問され、最後の右側のサブツリーが訪問されます。
  • Preorer-このツリートラバーサルでは、ルートノードが最初に、次に左のサブツリーで、最後に右のサブツリーでアクセスされます。
  • 後順-この手法は、左のサブツリー、次に右のサブツリー、最後のルートノードを訪問します。
  1. Bツリーでは、非終端ノードが持つことができる子ノードの最大数はMです。ここで、MはBツリーの順序です。一方、バイナリツリーには最大2つのサブツリーまたは子ノードを含めることができます。
  2. Bツリーは、データがディスクに保存されるときに使用され、バイナリツリーは、データがRAMなどの高速メモリに保存されるときに使用されます。
  3. Bツリーのもう1つの応用分野は、DBMSのコードインデックスデータ構造です。これに対して、バイナリツリーはコードの最適化、ハフマンコーディングなどで使用されます。
  4. Bツリーの最大の高さはlogですMN(Mはツリーの順序)。反対に、バイナリツリーの最大の高さはlogです2N(Nはノードの数であり、ベースはバイナリであるため2です)。

結論

Bツリーはバイナリおよびバイナリ検索ツリーで使用されます。これの主な理由は、CPUが高帯域幅チャネルでキャッシュに接続され、CPUが低帯域幅チャネルでディスクに接続されるメモリ階層です。レコードがRAMに格納される場合(小さくて高速)にバイナリツリーが使用され、レコードがディスクに格納される場合に(大規模で低速)Bツリーが使用されます。したがって、分岐係数が高く、ツリーの高さが低いため、バイナリツリーの代わりにBツリーを使用すると、アクセス時間が大幅に短縮されます。