二分探索木の和集合探索の基本と特徴

そして基本を調べてください

1. コンセプトと紹介

Union-find は、素のセットのマージとクエリを処理するために使用されるツリー型のデータ構造です。

ユニオン検索の考え方は、配列を使用してフォレスト全体 (親) を表すことです。ツリーのルート ノードはセットを一意に識別します。特定の要素のルートが見つかる限り、どのセットであるかを判断できます。入っています。

2. 適用される命令

和集合検索は、N 個の要素を含む一部の集合応用問題で使用されます。通常、各要素を最初に単一要素の集合として形成させ、その後、同じグループに属する要素の集合を特定の順序でマージし、その間要素がどのセットに含まれているかを示します。このプロセスは複雑ではないように見えますが、データ量は膨大であり、他のデータ構造を使用して記述すると、スペースが大きすぎてコンピュータが耐えられないことが多く、結果を短時間で計算できないため、唯一の方法は、処理するコレクションの Union Check を使用することです。

3. 共用体検索の基本的なデータ表現

 

3a5dba87949df6eb5af6184217a28431.png

上の図に示すように、 0 ~ 4はすべて05 ~ 9はすべて1です。これは、 5 つの要素0、1、2、3、および 4 が接続されており、5 つの要素5、6、7が接続されていることを意味します。 、 8 、 9 が接続されています。

 

1e265797338ベッド17f6995d93cfe4dd5d.png

上の図に示すように、以下の0, 2, 4, 6, および 8 は0の集合であり、これは 5 つの要素0, 2, 4, 6, および 8 が接続されていることを意味し、その下に1, 3, 5 があります。 、7、9集合1は、5つの要素0、1、3、5、7、9がつながっていることを意味する。

UnionFind クラスを構築して初期化します。各 id[i] はそれ自体を指し、マージされた要素はありません。

...
public UnionFind1(int n) {         count = n;         id = new int[n]; // 初期化、各 id[i] はそれ自体を指し、         (int i = 0; i < n) に         マージされた要素はありません; i++)             id[i] = i;     } ...






Javaのサンプルコード

ソースコードパッケージのダウンロード:ダウンロード

UnionFind.java ファイルのコード:

パッケージ runob.union;

public class UnionFind{     private int[] id;     // データベース个数     private int count;     public UnionFind1(int n) {         カウント = n;         id = 新しい int[n];         for (int i = 0; i < n; i++)             id[i] = i;     } }  











二分探索木の特徴

1. シーケンス

二分探索ツリーはルックアップ テーブルの実装として使用できます。

二分探索木を使用する目的は、キーを検索して値を即座に取得することです。minimum、maximum、successor (後継者)、predecessor (先行者)、floor (フロア)、ceil (ceiling、rank (ランク付けされた要素)、select (誰が n ランク付けされた要素か))、これらは二分探索ツリー順序付けパフォーマンスです。

2. 制限事項

二分探索ツリーには時間パフォーマンスの制限があります。

以下の図に示すように、要素ノードは同じであり、2 つの異なる二分探索ツリーを形成しており、どちらも次の定義を満たしています。

 

095ba7e31646b69178cf722d020c6db2.png

二分探索木は連結リストに縮退する場合があり,これに対応して,二分探索木の探索動作は木の高さに関係する.このとき,木の高さは木のノード数nとなる.同時に、二分探索ツリーに対応するアルゴリズムはすべて O(n) レベルに縮退します。

 

 

おすすめ

転載: blog.csdn.net/2301_78835635/article/details/132322172