説明されたデータ構造の4種類の木:プロパティとアプリケーション
公開: 2021-06-18目次
データ構造のツリーとは何ですか?
ツリーは、階層データを表すデータ構造の一種です。 これは、エッジで接続されたノードで構成される非線形構造を持っています。 線形データ構造で操作を実行する他のタイプのデータ構造の中でも、データサイズが大きくなると複雑さが増します。 ただし、ツリーデータ構造により、非線形のデータにすばやくアクセスできます。 さまざまなタイプのデータ構造とそれに関連するアルゴリズムの可用性により、タスクのパフォーマンスは簡単で効率的な方法になりました。
データ構造のツリーに関連するいくつかの用語は次のとおりです。
- ノード:ノードは、キーまたは値とその子ノードへのポインターを含むツリーデータ構造内のエンティティです。
- 子ノード:子ノードは任意のノードの子孫です。
- リーフノード:子ノードがなく、ツリーの最下部のノードであるノード。 これらは外部ノードとも呼ばれます。
- ルート:木の最上部です。
- 内部ノード:少なくとも1つの子ノードを持つノード。
- エッジ:エッジとは、ツリー内の任意の2つのノード間の接続を指します。
- ノードの高さ:ノードから最も深い葉までのエッジの数。
- ノードの深さ:ルートからノードまでのエッジの数。
- 木の高さ:ルートノードの高さ。
- ノードの次数:そのノードへのブランチの総数。
- 森:ばらばらな木のコレクション。
木の種類
1.二分木
二分木は、すべての親ノードに最大2つの子ノードがあるツリーデータ構造の一種です。 名前が示すように、バイナリは2つを意味します。したがって、各ノードは0、1、または2つのノードを持つことができます。 バイナリツリーのデータ構造を図1に示します。ツリーのノード1には、子ノードごとに1つずつ、合計2つのポインターが含まれています。 ノード2にも、2つの子ノードに対してそれぞれ2つのポインターがあります。 一方、ノード3、5、および6はリーフノードであるため、左右両方の部分にnullポインターがあります。
図1:二分木の表現( https://www.javatpoint.com/binary-tree )。
二分木の特性
- Iの各レベルでのノードの最大数は2iです。
- 図1のツリーの高さは3です。これは、ノードの最大数が(1 + 2 + 4 + 8)=15になることを意味します。
- 高さhで、可能なノードの最大数は(20 + 21 + 22 +….2h)= 2h+1-1です。
- 高さhでは、可能なノードの最小数はh+1に等しくなります。
- 最小数のノードは最大の高さのツリーを表し、その逆も同様です。
二分木でさえ、次のタイプのツリーに分けることができます。
- 完全な二分木:これは特殊なタイプの二分木です。 このツリーデータ構造では、すべての親ノードまたは内部ノードに2つの子があるか、子ノードがありません。
- 完全な二分木:このタイプのツリーデータ構造では、すべての内部ノードに正確に2つの子ノードがあり、すべてのリーフノードが同じレベルにあります。
- 完全な二分木:完全な二分木に似ていますが、いくつかの違いがあります。
- すべてのレベルが完全に満たされています。
- 葉の節は木の左側に寄りかかっています。
- 最後のリーフノードが正しい兄弟を持つ必要はありません。つまり、完全な二分木は完全な二分木である必要はありません。
- 縮退または病理学的ツリー:これらのツリーには、親ノードの左側または右側に1つの子があります。
- 歪んだ二分木:これは、ツリーが左側のノードまたは右側のノードのいずれかによって支配されている病理学的または縮退したツリーです。 したがって、歪んだ二分木には、左に歪んだ二分木と右に歪んだ二分木という2つのタイプがあります。
- 平衡二分木:各ノードの左右のサブツリーの高さの差は0または1です。
2.二分探索木
これらのツリー構造は非線形であり、1つのノードが複数のノードに接続されています。 ノードは、最大2つの子ノードに接続できます。 これは、次の理由で二分探索木と呼ばれます。
- 各ノードには、最大2つの子ノードがあります。
- これは、0(log(n))時間で要素を検索するために使用できるため、検索ツリーと呼ばれます。
図:二分探索木の例( https://www.tutorialspoint.com/data_structures_algorithms/binary_search_tree.htm )
二分探索木のプロパティは次のとおりです。
- 左側のサブツリーのすべてのノードの値は、ルートノードの値よりも小さくする必要があります。
- 右側のサブツリーのすべてのノードの値は、ルートノードの値よりも大きくする必要があります。
3.AVLツリー
AVLツリーは、バイナリツリーのタイプまたはバリアントです。 これは、バイナリ検索ツリーとバイナリ検索ツリーの両方のプロパティで構成されています。 アデルソンベルスキーリンダスによって発明されたこれらのツリーは自己バランス型です。つまり、左側のサブツリーと右側のサブツリーの高さがバランスされています。 このバランスは、バランス係数の観点から測定されます。
バランス係数:
- これは、左側のサブツリーと右側のサブツリーの違いです。
- 平衡係数の値は0、-1、または1である必要があります。したがって、AVLツリーの各ノードは、平衡係数の値、つまり0、-1、または1で構成されている必要があります。
- バランス係数=(左のサブツリーの高さ–右のサブツリーの高さ)
- 各ノードのバランス係数が-1から1の場合、AVLツリーはバランスツリーと呼ばれます。
AVLツリーの-1から1以外のノードの値は、バランスが必要な不均衡なツリーを表します。
- ノードのバランス係数が1の場合、左側のサブツリーが右側のサブツリーより1レベル高いことを意味します。
- ノードのバランス係数が0の場合、左側のサブツリーと右側のサブツリーの高さが等しいことを意味します。
- ノードのバランス係数が-1の場合、右側のサブツリーが左側のサブツリーより1レベル高いか、左側のサブツリーが右側のサブツリーより1レベル低いことを意味します。
4.Bツリー
Bツリーは、バイナリ検索ツリーのより一般化された形式です。 これは、高さバランスのとれたmウェイツリーとも呼ばれます。ここで、mはツリーの順序です。 ツリーの各ノードには、複数のキーと3つ以上の子ノードを含めることができます。 二分木の場合、リーフノードは同じレベルにない可能性があります。 ただし、Bツリーの場合、すべてのリーフノードは同じレベルにある必要があります。
Bツリーのプロパティ:
- キーは、ノードxごとに昇順で格納されます。
- ブール値「x.leaf」が各ノードに存在します。これは、xがリーフの場合に当てはまります。
- 内部ノードには最大で「n-1」個のキーが必要です。ここで、nはツリーの順序です。 また、各子へのポインタも必要です。
- ルートノードを除いて、すべてのノードには最大n個の子と少なくともn/2個の子があります。
- ツリーのリーフノードの深さは同じです。
- ルートノードには、少なくとも1つのキーと少なくとも2つの子があります。
- n≥1の場合、高さhで最小次数t≥2の任意のnキーBツリーに対して、h≥logt(n + 1)/2。
アプリケーション
- 二分探索木は、要素のセット内の要素を検索するために適用できます。
- ヒープツリーは、ヒープソートに使用されます。
- 最近のルーターは、ルーティング情報を格納するためにTriesと呼ばれるタイプのツリーを使用します。
- BツリーとTツリーは、主に人気のあるデータベースでデータを保存するために使用されます。
- 構文ツリーは、作成されたすべてのプログラムの構文を検証するためにコンパイラーによって使用されます。
結論
データ構造は、データを整理して保存する方法を提供し、管理を容易にし、効果的に処理します。 さまざまなタイプのデータに対して、さまざまなタイプのデータ構造が存在します。 保存する必要のあるデータの種類に基づいて、ユーザーが選択します。
ツリーは、階層型のデータを格納できるようなデータ構造の一種です。 データはノードに保存され、子ノードと呼ばれる他のノードの参照が保存されることもあります。
子ノードの数に基づいて、記事で説明されているように、ツリーはさまざまなタイプに分類できます。 ツリータイプのノードの配置に基づいて、各ツリー構造には関連付けられたプロパティがあります。 さまざまなクラスのツリーで実行できるさまざまなタイプの操作により、このタイプのデータ構造は、ソートアルゴリズムおよびデータストレージでのアプリケーションを見つけました。
ソフトウェア開発のエグゼクティブPGプログラム– upGrad&IIIT-Bangaloreによってキュレーションされたフルスタック開発の専門分野は、あなたのプロフィールを改善し、プログラマーとしてのより良い雇用機会を確保するのに役立ちます。
一見すると、二分木と二分探索木はどちらも似ているように見えますが、多くの点で互いに大きく異なります。 自己平衡ツリーは、新しいノードの挿入時にこれらのツリーがバランスをとるように構造化された二分探索木です。二分木と二分探索木の違いを述べてください。
二分木-
1.二分木は最大で2つのノードを持つことができ、ノードの特定の順序はありません。
2.挿入、削除、検索などの操作は、順序付けされていないため、比較的遅くなります。
3.完全な二分木、拡張された二分木、および完全な二分木は、二分木の例です。
二分探索木-
1.二分探索木は特別な種類の二分木であり、各ノードには、それ自体が二分木である左右のサブツリーがあります。
2.要素が順序付けられているため、これらの操作はすべて高速です。
3. AVLツリー、タンゴツリー、およびスプレーツリーは、二分探索木の例です。 自己平衡木とは何ですか?どこで使用されますか?
自己バランス型ツリーの例は次のとおりです。
AVLツリー
スプレーツリー
赤黒木
セルフバランシングツリーは、データベーストランザクション、ファイルシステム、キャッシュ管理、ガベージコレクション用に作成されたアルゴリズム、マルチセット実装など、いくつかの実際のアプリケーションを実装するために使用されます。