これは、あなたが最も技術を理解するために必要なものです!審査官は、あなたのBツリーとB +木を求めて、この記事を置くために彼を投げました

個人ブログのナビゲーションページ(クリック、右側にリンク個人のブログを開くために):ダニエルは、テクノロジ・スタックにあなたを取ります 

1件のBツリー

B +ツリーを導入する前に、簡単には、2つのデータ構造、Bツリーについての類似点と相違点その両方を教えてください、そして最後に、我々はこれら2つのデータ構造の違いを比較します。

1.1 Bツリーのコンセプト

また、複数の平衡探索木であるB-ツリーとして知られるB木、。バイナリ私は誰もが最も単純なバイナリ変換が来るから、Bツリーの定義での外観を聞かせて、何も不思議な場所があるあるBツリーとB +木の後ろの話、実際には、精通していると思います。

  • 各ノードは、ほとんどのM-1番目に有しているキーワード(キーと値のペアが存在してもよいです)。

  • 少なくとも、ルートに1つだけの缶のキーワード

  • 非ルートノードは、少なくともM / 2番目有するキーワード

  • キーワードのために、各ノードは、キーワードのすべてのキーワードが少ないそれよりも左サブツリー及び右サブツリー内のすべてのキーワードの各々は、それよりも大きい、小から大まで配置されています。

  • すべてのリーフノードは、同じ層にある、またはルートノードへの各リーフノードの長さは同じです。

  • 各ノードが索引データ、対応するキーと値。

そのため、ルートキー番号の範囲:1 <= k <= m-1非ルートキー番号のm/2 <= k <= m-1範囲:

また、我々は概念に注意を払うに必要な、あなたは通常、文字mの順番を表し、順序はノードが子ノードの最大数を持って表し、Bツリーを記述するその順序を指定する必要があります。

私たちは、上記の概念を説明するために例をとり、第五次Bツリーは、ルートノード番号の範囲が存在するような1 <= K <= 4、非ルートノードの数が範囲:2 <= K <= 4。

次に、我々は、次に、挿入工程Bツリーを説明し、例を介して挿入され、その後、キーワードの削除処理を説明します。

1.2 Bツリー挿入

挿入された、我々は、ルールを覚えておく必要がある:現在のノードが左右にこのノードがキー以下のM-1、そうであれば、直接挿入することができる数であり、そうでない場合、鍵中間ノードかどうかを決定します親ノードに対する中間ノードに二つの部分、。

例:(:ノードと次のノードは、統一キーと値を表します)ステップ5-Bツリーでは、ノードは、4つのキーアップ、2つのキーの最小値を有します。

  • 18,70,50,40を挿入

  • 22挿入

あなたは22を挿入すると、すでに上記の規則によって分割するので、必要性、重要なノードが4つ以上を持っていた次のように、分割後、言いました。

  • [挿入23,25,39

スプリットは、以下を得ます。

もっと上の挿入プロセスは、より導入しないだろう、私はこの例では、すでに運転を挿入する方法を知っていると信じています。

ツリーの削除操作1.3 B

挿入操作のBツリーの削除を使用すると、いくつかの例を覚えて、同じ缶を簡単に把握知っている、比較的複雑である、しかし。

  • 今、初期状態は以下のBツリー、その後、削除操作がされています。

  • 15削除、この状況は、後で削除した場合、葉ノード要素を削除すること、またはノードの数よりも大きいm/2限り、この状況を直接削除することができるように、。

  • その後、私たちはこのためのルールを削除する22を置く:22非リーフノードを、我々はキーを無効にする必要があり、後続のキー(要素)によって除去されるように、非リーフノードを削除し、その後、サブブランチを削除するところ後継キーフォローキーを22を削除するため、ノード22を削除する後続の要素に移動する24必要が配置されています。

ディスカバリ・ノード26は、一つだけの要素である。この時点で、以下2(M / 2)よりも、このノードが要件を満たしていない、この時間(兄弟に要素を借りたが)ルール:あなたはリーフノードを削除する場合は、要素数が要素を削除する場合以下(M / 2)よりも、その兄弟要素は、複数のM / 2の最小値よりも、このノード上の親ノードの最初の要素を要素の兄弟ノードを言うことである、(M / 2)よりも大きいです要素は、その後、兄弟ノードの親ノードに再び移動されますこれは、要件を満たしています。

私たちも、より理解し、操作を見てみましょう。

  • その後、28を削除するリーフノードを削除し、我々は兄弟を考慮すべき要素を借りる必要があるので、削除することは、要件を満たしていない、しかし、より多くのノード(2)の兄弟よりも何も、それを行う方法を、借りることはできませんか?この問題が発生した場合、まず、それがキー内のノードと現在のノードとその兄弟に親ノードの移動の最初の要素は、新しいノードを合併しています

移動した後、兄弟と合併。

のみ上記の状況を削除するには、状況に応じて削除することができます。

これらの報告の上に、私はBツリーは、特定の理解、次の部分を持っていると信じて、私たちはその後、B +ツリーを説明し、私はより明確に、比較B +ツリーとその一緒に考えています。

2 B +ツリー

2.1 B +ツリーの概要

B +ツリーとBツリーは、実際に私たちの最初の見て、非常に似ている同じポイント

  • 少なくとも1つのルート要素
  • 非ルートノードは、要素の範囲:M / 2 <= K <= M-1

異なる点

  • 内部ノード(別名iノード)とリーフノード:B +ツリーは、ノードの2種類があります。内部ノードは非リーフノードであり、内部ノードは、データを格納しない、記憶インデックスのみ、データがリーフノードに格納されています。
  • 内部ノードのキーツリーにおける左キーのすべてが以下の右サブツリーよりそれ以上の鍵とされ、内部ノードにキーに、昇順です。レコードリーフノードは、キーの大きさに応じて配置されています。
  • 各リーフノードポインタ隣接するリーフノード、リンク自体キーワードのサイズに応じて育てリーフノードの大きい順があります。
  • 右の子の最初の要素の存在親インデックス。

B +ツリーの例で見てみましょう、今の気持ちにそれを感じます!

2.2挿入

操作を挿入するため、非常に簡単であるだけ覚えてスキルを必要とする:中間要素は、中間要素自体が、左右に分割インデックスストアとして親ノードに中間要素分割されることにより、素子のノードの数が、M-1よりも大きい場合あるいは、このセクションの右側を分割します

一例として、第五次B +ツリーを挿入するには、次の手順では、第五次B +ツリーは、少なくとも二つの要素は、4つの要素の最大ノード。

  • 挿入5,10,15,20-

  • 25が挿入され、次いで、要素の数は、4つの分割よりも大きいです

  • その後、分裂し続ける、26、30を挿入

これらのいくつかの例では、私は何の問題インサートは、削除しないで、その後、下記をご覧と信じています。

2.3削除

ので、削除操作のために、Bツリーのいくつかのより簡単であるリーフノードはポインタを存在する要素の兄弟を借りるときに、親はによって必要とされず、直接セクションに移動兄弟によって(ただし、兄弟の要素M / 2を超える)、及び、親ノードのインデックスを更新し、主ノード要素は、複数のM / 2兄弟よりない場合(Noの兄弟は、余分な要素ノードない)、現在ノードと兄弟ノードを合わせて削除される親、ここでは、具体的な例を見てください。

  • 初期状態

  • 10削除、親ノードのインデックスを変更するために、左の兄弟で見つかった要件は、最終的には、余分な要素なので、ボロー要素を持ち、削除満たしていません

  • 要素5を削除し、あなたは合併を選択し、兄弟ことができるように最後に変更された親インデックス、それが要件を満たしていない見つけ、約兄弟は、余分な要素ではないことがわかりました

  • これは、上記の手順と同じ操作を行う必要があり、親インデックスは、したがって、条件を満たしていないことがわかりました

このように、Bの+ツリーの削除が終了し、それを読んだ後ではありません、私は非常にシンプルな感じ!

3 BとB +ツリーツリーの概要

BツリーにB +ツリーの相対は、独自の利点のいくつかは、それは以下の点に起因することができています。

  • 複数の単一ノード記憶素子、それは、MySQLデータベースの基礎となるデータ構造としては、より適したものとなるように、IOの数は、少ない問い合わせこと。
  • すべてのお問い合わせは、リーフノードになります、クエリのパフォーマンスが安定している、Bツリーながら、各ノードは、とても不安定なデータを見つけることができます。
  • すべてのリーフノードを見つけるのは、より簡単に、順序付きリストを形成します。

付属のJava / C / C ++ /機械学習/アルゴリズムとデータ構造/フロントエンド/アンドロイド/パイソン/プログラマ読み/シングル書籍図書Daquanは:

(乾燥した個人ブログでそこ開くには、右クリックしてください):技術的なドライ開花を
===== >> ①[Javaのダニエルは、高度なへの道であなたを取る] << ====
===== >> ②[+ ACMアルゴリズムデータ構造ダニエルは、高度なへの道であなたを取る] << ===
===== >> ③[データベースダニエルは高度への道であなたを取る] << == ===
===== >> ④[ダニエルWebフロントエンドの高度への道であなたを取るために] << ====
===== >> ⑤[機械学習のPythonとダニエルあなたにエントリを取ります高度なロード] << ====
===== >> ⑥[建築家ダニエルは高度への道であなたを取る] << =====
===== >> ⑦[C ++ダニエルは、道路上をお連れに進ん] << ====
===== >> ⑧[ダニエルは高度への道であなたを取るのiOS] << ====
=====> > ⑨[ウェブセキュリティダニエルは、高度なへの道であなたを取る] ===== <<
===== >> ⑩[Linuxオペレーティングシステムを、ダニエルは高度への道であなたを取る] = << ====

何の未収果物はありません、あなたの若い友人は、友人がテクニックを学びたい願って、道路の方法ですべての障害を克服することは、技術に結びつける本を理解して、コードをノック、原理を理解し、実践を行くことになります決定しましたそれはあなたの将来、あなたの夢を生活、あなたの仕事をもたらすでしょう。

公開された47元の記事 ウォンの賞賛0 ビュー263

おすすめ

転載: blog.csdn.net/weixin_41663412/article/details/104898923
おすすめ