"DisjointSet" (データ構造)
"DisjointSet"
一般式であり,互いに素な集合に分割される要素の集合を表す.
詳細
- 互いに素な集合には,効率的なマージと削除,およびメンバシップの検証が行える.
-
CreateDataStructure[ "DisjointSet"] 新しい空の"DisjointSet"を作成する Typed[x,"DisjointSet"] x に"DisjointSet"型を与える - "DisjointSet"型のデータ構造には,以下の演算が使える.
-
ds["CommonSubsetQ",x,y] x と y が同じ部分集合に含まれる場合にTrueを返す time: O(α(n)) ds["Copy"] ds のコピーを返す time: O(n) ds["Delete",x] x を ds から削除し,x が実際に要素である場合にはTrueを返す time: O(n) ds["Elements"] ds の要素のリストを返す time: O(n) ds["EmptyQ"] ds が空の場合にはTrue time: O(1) ds["Find",x] x の親を返す time: O(α(n)) ds["Insert",x] x を要素の集合に加える time: O(α(n)) ds["InsertAll",elems] 要素 elems を要素の集合に加える time: O(α(n) nelems) ds["Length"] ds に保存される要素の数を返す time: O(1) ds["MemberQ",x] x が ds の要素である場合にTrueを返す time: O(1) ds["Merge",dsi] dsi の要素をinto ds に結合する time: O(n) ds["Subsets"] ds の部分集合を返す time: O(n) ds["Unify",x,y] x と y の部分集合を統合する time: O(α(n)) ds["UnifyAll",elems] elems の要素の部分集合を統合する time: O(α(n) nelems) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する - 一般的な部分集合における挿入,マージ,検証等の演算の多くは,ほぼ一定の時間で行われ,α(n),逆アッカーマン関数で有界である.
例題
すべて開くすべて閉じる例 (1)
新しい"DisjointSet"は,CreateDataStructureを使って作成できる:
スコープ (1)
情報 (1)
新しい"DisjointSet"は,CreateDataStructureを使って作成することができる: