そして基本を調べてください
1. コンセプトと紹介
Union-find は、素のセットのマージとクエリを処理するために使用されるツリー型のデータ構造です。
ユニオン検索の考え方は、配列を使用してフォレスト全体 (親) を表すことです。ツリーのルート ノードはセットを一意に識別します。特定の要素のルートが見つかる限り、どのセットであるかを判断できます。入っています。
2. 適用される命令
和集合検索は、N 個の要素を含む一部の集合応用問題で使用されます。通常、各要素を最初に単一要素の集合として形成させ、その後、同じグループに属する要素の集合を特定の順序でマージし、その間。要素がどのセットに含まれているかを示します。このプロセスは複雑ではないように見えますが、データ量は膨大であり、他のデータ構造を使用して記述すると、スペースが大きすぎてコンピュータが耐えられないことが多く、結果を短時間で計算できないため、唯一の方法は、処理するコレクションの Union Check を使用することです。
3. 共用体検索の基本的なデータ表現
上の図に示すように、 0 ~ 4はすべて0、5 ~ 9はすべて1です。これは、 5 つの要素0、1、2、3、および 4 が接続されており、5 つの要素5、6、7が接続されていることを意味します。 、 8 、 9 が接続されています。
上の図に示すように、以下の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 つの異なる二分探索ツリーを形成しており、どちらも次の定義を満たしています。
二分探索木は連結リストに縮退する場合があり,これに対応して,二分探索木の探索動作は木の高さに関係する.このとき,木の高さは木のノード数nとなる.同時に、二分探索ツリーに対応するアルゴリズムはすべて O(n) レベルに縮退します。