Javaデータ構造とアルゴリズム-複数検索ツリー(2-3ツリー、Bツリー、B +ツリー、B *ツリー)[day11]

複数の検索ツリー


バイナリツリーとBツリー



バイナリツリーの問題分析:バイナリツリーの運用効率は高いですが、問題もあります。以下のバイナリツリーをご覧ください。

ここに写真の説明を挿入

二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,
但是如果二叉树的节点很多(比如1亿), 就存在如下问题:

问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),
节点海量,构建二叉树时,速度有影响.
    
问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.
    
解决上述问题 -> 多叉树

ポリツリー

1.バイナリツリーでは、各ノードにデータアイテムがあり、最大2つの子ノードがあります。
場合、各ノードは複数のデータ項目と複数の子ノードを持つことが許可され、それは
多分木(マルチウェイツリー)である

。2. 2-3木後述、2-3-4ツリーは多分木、多方向ツリーツリー、ノードを再編成し、ツリーの高さ減らすことによって、バイナリツリーを最適化できます。

3.例:(以下の2〜3ツリーはポリツリーです)

ここに写真の説明を挿入


Bツリーの基本紹介

Bツリーは、ノードを再編成し、ツリーの高さを減らし、読み取りと書き込みの数を減らすことにより、効率を向上させます。
ここに写真の説明を挿入

1.図Bに示すようにツリーはノードを再編成することによってツリーの高さを減らします

。2 ファイルシステムとデータベースシステムの設計者は、ディスク先読みの原則を使用して
、ノードのサイズをページに等しく設定します(ページサイズは通常4K)、
その結果、各ノードは唯一のI / Oが完全にロードされる必要があること


3.セットの中1024へ木の程度M 600億個の要素を、それが読み取ることができる唯一の4最もにI / O操作目的の要素に対して、Bツリー(B +)はファイルストレージシステムおよびデータベースシステムで広く使用されています


2-3本の木

2-3ツリーの基本的な紹介:

  • 2-3ツリーは最も単純なBツリー構造です
  • 次の特徴があります。2〜3ツリーのすべてのリーフノードが同じレイヤーにあります(Bツリーがこの条件を満たす限り)
  • 2つの子ノードを持つノードは2番目のノードと呼ばれます.2番目のノードには子ノードがないか、
    2つの子ノードがあります。
  • 3つの子ノードを持つノードは3ノードと呼ばれ、3ノードには子ノードがないか3つの子ノードがあります。
  • 2-3ツリーは、2つのノードと3つのノードで構成されるツリーです。2-3ツリーアプリケーションケース
将数列{16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20}
 构建成2-3树,并保证数据插入的大小顺序。

(演示构建2-3树的过程 ——> 如下:)

插入规则:
1.2-3树的所有叶子节点都在同一层.(只要是B树都满足这个条件)
2.有两个子节点的节点叫二节点,二节点要么没有子节点,
要么有两个子节点.
3.有三个子节点的节点叫三节点,三节点要么没有子节点,
要么有三个子节点
4.当按照规则插入一个数到某个节点时,不能满足上面三个要求,
就需要拆,先向上拆,如果上层满,则拆本层,
拆后仍然需要满足上面3个条件。 
5.对于三节点的子树的值大小仍然遵守(BST 二叉排序树)的规则

ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入

説明:

  1. 10を挿入すると、10-12 -14になるはずですが、この時点ではいっぱいなので、見上げると16-26もいっぱいです。
  2. したがって、10-12-14を10 <-12-> 14に分割します。これは、他の分割方法では2ノードまたは3ノードの要件を満たすことができないためです。

ここに写真の説明を挿入

  1. ただし、現時点では、リーフノードがすべて同じレイヤーにあるわけではないため、26の値を次のように調整する必要があります(図を参照)。
    ここに写真の説明を挿入
    ここに写真の説明を挿入
    ここに写真の説明を挿入
    ここに写真の説明を挿入
    ここに写真の説明を挿入

その他の指示

23本の他に234本などあります。コンセプトは23本と似ており、Bツリーでもあります。示されているように:


Bツリー、B +ツリー、B *ツリー

Bツリーの紹介

B-treeB-treeであり、BはBalancedであり、バランスを意味します。BツリーをBツリーに翻訳する人もいますが、これは誤解されやすいものです。Bツリーは一種のツリーであり、Bツリーは別の種類のツリーであると考える人もいるかもしれません。実際、BツリーはBツリーを指します

すでに2-3ツリーと2-3-4ツリーを紹介しました。これらはBツリーです(英語:BツリーはBツリーとも表記されます)。ここで別の説明をします。Mysqlを学習していると、よく耳にします。次の図に示すように、特定のタイプのインデックスはBツリーまたはB +ツリーに基づいています。
ここに写真の説明を挿入

B树的说明:
1.B树的阶:节点的最多子节点个数。比如2-3树的阶是3,2-3-4树的阶是4

2.B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,
如果命中则结束,否则进入查询关键字所属范围的儿子结点;
重复,直到所对应的儿子指针为空,或已经是叶子结点

3.关键字集合分布在整颗树中, 即叶子节点和非叶子节点都存放数据.

4.搜索有可能在非叶子结点结束

5.其搜索性能等价于在关键字全集内做一次二分查找

B +ツリーの紹介

B +ツリーはBツリーの変形であり、マルチパス検索ツリーでもあります。

ここに写真の説明を挿入

B +説明ツリー:
1.B +ツリー検索Bツリーは基本的に同じですが、B +ツリーがリーフノードのみのヒットに到達しただけであり(Bツリーは非リーフノードのヒットである可能性があります)、そのパフォーマンスはクリティカルと同等です。単語の完全なセットのバイナリ検索
2すべてのキーワードがリーフノードのリンクリストに表示され(つまり、データはリーフノード[デンスインデックスとも呼ばれます]にのみ存在できます)、リンクリストのキーワード(データ)はたまたま順番に表示されます。
3.非リーフノードをヒットすることはできません
。4。非リーフノードはリーフノードのインデックス(スパースインデックス)に相当し、リーフノードはデータ
格納するためのデータレイヤー(キーワード)に相当します。5 ファイルインデックスシステム
6に適しています.B-treeとB + -treeにはそれぞれ独自のアプリケーションシナリオがあります。B+ -treeがB-treeよりも完全に優れているとは言えません。逆もまた同様です。


B * treeの紹介

B *ツリーはB +ツリーの変形です。B+ツリーの非ルートノードと非リーフノードに、兄弟へのポインターが追加されます。
ここに写真の説明を挿入

B *ツリーの説明:

  • B *ツリーは、非リーフノードキーワードの数が少なくとも(2/3)* Mであることを定義します。つまり、ブロックの最小使用率は2/3であり、B +ツリーのブロックの最小使用率はB +ツリーの1/2です。 。

  • 最初の特徴から、B *ツリーが新しいノードを割り当てる確率はB +ツリーよりも低くスペース使用率が高いことがわかります。

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/SwaeLeeUknow/article/details/109082568