素集合森とは? わかりやすく解説

素集合森

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/10/07 05:02 UTC 版)

素集合データ構造」の記事における「素集合森」の解説

素集合森 (disjoint-set forest) はそれぞれの集合木構造表したデータ構造で、各ノードには親ノードへの参照がある。1964年Bernard A. Galler と Michael J. Fischer考案したが、詳細な解析にはその後何年かかった。 素集合森では、各集合の代表は木構造の根となる。Find親ノードへのリンクを根に到達するまでたどっていく。Union2つ木構造1つにする操作であり、どちらかの根が全体の根となる。以下に素集合森の実装例擬似コードで示す。 function MakeSet(x) x.parent := x function Find(x) if x.parent == x return x else return Find(x.parent) function Union(x, y) xRoot := Find(x) yRoot := Find(y) xRoot.parent := yRoot この素朴な実装では、連結リスト使った場合変わらない。なぜなら、木構造平衡保たれないからである。しかし、これを改善する方法2つある。 第一方法union by rank呼ばれUnion操作で常に大きい木の方が全体の根になるように連結するのである。木の大きさ評価するにはrank用いる。これは、1要素の木の rank を 0 とし、同じ rank r の木を連結したとき、全体の根とした方の木の rank を r+1 とするものであるこのようにするだけで、MakeSet、UnionFind 操作償却実行時間は O ( log ⁡ n ) {\displaystyle O(\log n)} となる。改良した MakeSet と Union擬似コードは以下のようになるfunction MakeSet(x) x.parent := x x.rank := 0 function Union(x, y) xRoot := Find(x) yRoot := Find(y) if xRoot.rank > yRoot.rank yRoot.parent := xRoot else if xRoot.rank < yRoot.rank xRoot.parent := yRoot else if xRoot != yRoot // x と y が同じ集合ない場合だけマージする。 yRoot.parent := xRoot xRoot.rank := xRoot.rank + 1 第二改善path compression呼ばれFind操作行ったときに構造平坦化するものであるFind根ノードまでのリンクをたどっているとき、各ノードは同じ代表を共有しているので、それらを根ノード直接接続できる。このためFind再帰的たどったノード全て親ノードとして根ノードを指すように変更するこうする木構造はより平坦になり、その後操作高速化される。以下に Find改良版を示す。 function Find(x) if x.parent == x return x else x.parent := Find(x.parent) return x.parent これらの手法は相補的であり、これを共に行うことで各操作償却実行時間は O ( α ( n ) ) {\displaystyle O(\alpha (n))} となる。ここで α ( n ) {\displaystyle \alpha (n)} は関数 f ( n ) = A ( n , n ) {\displaystyle f(n)=A(n,n)} の逆であり、 A {\displaystyle A} は非常に高速大きな値になるアッカーマン関数である。 α ( n ) {\displaystyle \alpha (n)} はその逆関数なので、実用的な n {\displaystyle n} の値に対しては常に 5 未満の値になる。したがって、各操作償却実行時間事実上非常に小さな定数となる。 実際、これは漸近最良である。Fredman と Saks は1989年どのような素集合データ構造でも1回操作あたり平均で Ω ( α ( n ) ) {\displaystyle \Omega (\alpha (n))} のノードアクセスするとした。

※この「素集合森」の解説は、「素集合データ構造」の解説の一部です。
「素集合森」を含む「素集合データ構造」の記事については、「素集合データ構造」の概要を参照ください。

ウィキペディア小見出し辞書の「素集合森」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「素集合森」の関連用語

素集合森のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



素集合森のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの素集合データ構造 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS