Submit Search
Upload
素集合データ構造
•
5 likes
•
6,497 views
京大 マイコンクラブ
Follow
競技プログラミング練習会2014 Normalで使ったスライドです。素集合データ構造であるUnion-Find木について説明しています。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 29
Download now
Download to read offline
Recommended
目指せグラフマスター
目指せグラフマスター
HCPC: 北海道大学競技プログラミングサークル
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
Fractional cascading
Fractional cascading
Nariaki Tateiwa
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
Recommended
目指せグラフマスター
目指せグラフマスター
HCPC: 北海道大学競技プログラミングサークル
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
Fractional cascading
Fractional cascading
Nariaki Tateiwa
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
双対性
双対性
Yoichi Iwata
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
直交領域探索
直交領域探索
okuraofvegetable
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
[DL輪読会]Convolutional Sequence to Sequence Learning
[DL輪読会]Convolutional Sequence to Sequence Learning
Deep Learning JP
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
全域木いろいろ
全域木いろいろ
HCPC: 北海道大学競技プログラミングサークル
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
Kensuke Otsuki
inversion counting
inversion counting
tmaehara
ランダムフォレスト
ランダムフォレスト
Kinki University
Bayes Independence Test - HSIC と性能を比較する-
Bayes Independence Test - HSIC と性能を比較する-
Joe Suzuki
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
AtCoder Inc.
幾何コンテスト2013
幾何コンテスト2013
Naoto Mizuno
More Related Content
What's hot
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
双対性
双対性
Yoichi Iwata
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
直交領域探索
直交領域探索
okuraofvegetable
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
[DL輪読会]Convolutional Sequence to Sequence Learning
[DL輪読会]Convolutional Sequence to Sequence Learning
Deep Learning JP
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
全域木いろいろ
全域木いろいろ
HCPC: 北海道大学競技プログラミングサークル
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
Kensuke Otsuki
inversion counting
inversion counting
tmaehara
ランダムフォレスト
ランダムフォレスト
Kinki University
Bayes Independence Test - HSIC と性能を比較する-
Bayes Independence Test - HSIC と性能を比較する-
Joe Suzuki
What's hot
(20)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
Rolling Hashを殺す話
Rolling Hashを殺す話
ウェーブレット木の世界
ウェーブレット木の世界
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
双対性
双対性
動的計画法を極める!
動的計画法を極める!
直交領域探索
直交領域探索
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
[DL輪読会]Convolutional Sequence to Sequence Learning
[DL輪読会]Convolutional Sequence to Sequence Learning
色々なダイクストラ高速化
色々なダイクストラ高速化
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
全域木いろいろ
全域木いろいろ
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Topological sort
Topological sort
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
inversion counting
inversion counting
ランダムフォレスト
ランダムフォレスト
Bayes Independence Test - HSIC と性能を比較する-
Bayes Independence Test - HSIC と性能を比較する-
Viewers also liked
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
AtCoder Inc.
幾何コンテスト2013
幾何コンテスト2013
Naoto Mizuno
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
AtCoder Inc.
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
TCO2017R1
TCO2017R1
AtCoder Inc.
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
AtCoder Inc.
Viewers also liked
(6)
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
幾何コンテスト2013
幾何コンテスト2013
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
TCO2017R1
TCO2017R1
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
More from 京大 マイコンクラブ
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
京大 マイコンクラブ
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
京大 マイコンクラブ
Common Lisp入門
Common Lisp入門
京大 マイコンクラブ
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
京大 マイコンクラブ
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
Geometry with Unity
Geometry with Unity
京大 マイコンクラブ
セミコロンレスc++
セミコロンレスc++
京大 マイコンクラブ
エンジニアと健康
エンジニアと健康
京大 マイコンクラブ
女の子になれなかった人のために
女の子になれなかった人のために
京大 マイコンクラブ
Pietで競プロしよう
Pietで競プロしよう
京大 マイコンクラブ
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
京大 マイコンクラブ
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
京大 マイコンクラブ
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
京大 マイコンクラブ
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
京大 マイコンクラブ
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
京大 マイコンクラブ
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
京大 マイコンクラブ
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
京大 マイコンクラブ
Altseed
Altseed
京大 マイコンクラブ
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
More from 京大 マイコンクラブ
(20)
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
Common Lisp入門
Common Lisp入門
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
Geometry with Unity
Geometry with Unity
セミコロンレスc++
セミコロンレスc++
エンジニアと健康
エンジニアと健康
女の子になれなかった人のために
女の子になれなかった人のために
Pietで競プロしよう
Pietで競プロしよう
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
Altseed
Altseed
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
素集合データ構造
1.
素集合データ構造 (Union-Find木)
2.
Union-Find木 ●互いに交わらない集合(素集合)の族を扱うデー タ構造 ●各集合に「代表」と呼ばれる要素を決めておく ●代表が違う⇔集合が違う ●Union-Find木は2つの操作ができる ●集合の要素からその集合の代表を求める(Find) ●2つの集合を合併する(Union)
3.
Find 4 59 10 1 7 11 63 12 2 8 13 代表
4.
Find 4 59 10 1 7 11 63 12 2 8 13 代表
5.
Find 4 59 10 1 7 11 63 12 2 8 13 代表
6.
Find 4 59 10 1 7 11 63 12 2 8 13 代表
7.
Find 4 59 10 1 7 11 63 12 2 8 13 代表
8.
Find 4 59 10 1 7 11 63 12 2 8 13 代表 4の属する集合と8の属する集合は違う!
9.
Union 4 59 10 1 7 11 63 12 2 8 13 代表
10.
Union 4 59 10 1 7 11 63 12 2 8 13 代表
11.
Union 4 59 10 1 7 11 6 3 12 2 8 13 代表
12.
Union-Find木の実装 ●それぞれの集合を根付き木で表す ●代表を根にする 1 5 2 6 3 79 10 11 12 134
8
13.
Find ●親を辿って根を見る 1 5 2 6 3 79 10 11 12 134
8
14.
Find ●親を辿って根を見る 1 5 2 6 3 79 10 11 12 134
8
15.
Find ●親を辿って根を見る 1 5 2 6 3 79 10 11 12 134
8
16.
Find ●親を辿って根を見る 1 5 2 6 3 79 10 11 12 134
8
17.
Union ●一方をもう一方の代表の子にする 1 5 2 6 3 79 10 11 12 134
8
18.
Union ●一方をもう一方の代表の子にする 1 5 2 6 3 7 9 10 11 12 134
8
19.
Union-Find木の計算量 ●このままだと最悪計算量は ●Find ●Union ●Findに時間がかかりすぎる ●2種類の高速化法がある … O(n) O(1)
20.
高速化その1:rank ●それぞれの木に と呼ばれる数値をつける ●要素1個の時 ● 同士の木を合併したら になる ● が違う木同士を合併するときは、 の高 い方に低い方を合併し、 は の高い方の にする ● の木の高さは高々 k rank rank 0 rank k
rank k+1 rank rank rank k rank rank rank
21.
高速化その1:rank 1 5 2 6 3 79 10 11 12 134
8 rank 2 rank 2 rank 1 rank 1
22.
高速化その1:rank 1 5 2 6 3 79 10 11 12 134
8 rank 2 rank 2 rank 1 rank 1
23.
高速化その1:rank 1 5 2 6 3 7 9 10 11 12 134
8 rank 2 rank 2 rank 1
24.
高速化その1:rank ● の木を作るには少なくとも 個の要素が 必要⇒ の木を作るには最低でも 個 の要素が必要(数学的帰納法) ●要素 個のUnion-Find木は高々 ●要素 個のUnion-Find木の高さは高々 ●最悪計算量は ●Find ●Union rank k 2k rank
k+1 2k+1 n rank⌊log2(n)⌋ n ⌊log2(n)⌋ O(log(n)) O(1)
25.
高速化その2:経路圧縮 ●Findするときに、根を親にしてしまう ●ついでに根にたどり着くまでの先祖の親も根にして しまう ●重要なのは根の情報だけだからこれで問題ない
26.
高速化その2:経路圧縮 1 5 2 6 3 7 9 10 11 12 13 4
8
27.
高速化その2:経路圧縮 1 5 2 6 3 7 9 10 11 12 13 4
8
28.
高速化その2:経路圧縮 1 5 2 6 3 79 10 11 12 13 4 8
29.
高速化その2:経路圧縮 ●最悪計算量(ならし) ●Find ●Union ●高速化その1と組み合わせることもできる ●経路圧縮しても は再計算しない ●Find ●Union ● はアッカーマン関数の逆関数、実質定数 O(log(n)) O(1) O(α(n)) O(1) rank α(n)
Download now