Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
AI
Uploaded by
AtCoder Inc.
PDF, PPTX
196,787 views
Union find(素集合データ構造)
Union find(素集合データ構造)の解説です
Education
◦
Read more
27
Save
Share
Embed
Save to Drive
Download now
Download as PDF, PPTX
1
/ 18
2
/ 18
3
/ 18
4
/ 18
5
/ 18
6
/ 18
7
/ 18
8
/ 18
9
/ 18
10
/ 18
11
/ 18
12
/ 18
Most read
13
/ 18
14
/ 18
15
/ 18
Most read
16
/ 18
17
/ 18
Most read
18
/ 18
More Related Content
PPTX
動的計画法を極める!
by
HCPC: 北海道大学競技プログラミングサークル
86 slides
13.7K views
PDF
Binary indexed tree
by
HCPC: 北海道大学競技プログラミングサークル
66 slides
16.3K views
PDF
プログラミングコンテストでのデータ構造
by
Takuya Akiba
73 slides
110.6K views
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
30 slides
52.3K views
PDF
プログラミングコンテストでの動的計画法
by
Takuya Akiba
59 slides
97.1K views
PDF
深さ優先探索による塗りつぶし
by
AtCoder Inc.
42 slides
143.2K views
PDF
ウェーブレット木の世界
by
Preferred Networks
67 slides
59.8K views
PDF
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
111 slides
24.9K views
動的計画法を極める!
by
HCPC: 北海道大学競技プログラミングサークル
86 slides
13.7K views
Binary indexed tree
by
HCPC: 北海道大学競技プログラミングサークル
66 slides
16.3K views
プログラミングコンテストでのデータ構造
by
Takuya Akiba
73 slides
110.6K views
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
30 slides
52.3K views
プログラミングコンテストでの動的計画法
by
Takuya Akiba
59 slides
97.1K views
深さ優先探索による塗りつぶし
by
AtCoder Inc.
42 slides
143.2K views
ウェーブレット木の世界
by
Preferred Networks
67 slides
59.8K views
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
111 slides
24.9K views
What's hot
PDF
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
128 slides
35K views
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
51 slides
64.7K views
PDF
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
37 slides
28.7K views
PDF
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
67 slides
17.7K views
PPTX
充足可能性問題のいろいろ
by
Hiroshi Yamashita
60 slides
8.4K views
PDF
自動定理証明の紹介
by
Masahiro Sakai
23 slides
8.6K views
PDF
SAT/SMTソルバの仕組み
by
Masahiro Sakai
51 slides
39.1K views
PDF
ブースティング入門
by
Retrieva inc.
33 slides
34.9K views
PDF
最適化超入門
by
Takami Sato
80 slides
203.2K views
PDF
【メタサーベイ】基盤モデル / Foundation Models
by
cvpaper. challenge
63 slides
20.6K views
PDF
Rolling Hashを殺す話
by
Nagisa Eto
26 slides
5.9K views
PDF
双対性
by
Yoichi Iwata
89 slides
29.8K views
PDF
色々なダイクストラ高速化
by
yosupo
35 slides
27.1K views
PDF
多様な強化学習の概念と課題認識
by
佑 甲野
38 slides
59.4K views
PDF
Convex Hull Trick
by
HCPC: 北海道大学競技プログラミングサークル
48 slides
4.1K views
PDF
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
by
Kenshi Abe
44 slides
13.2K views
PDF
指数時間アルゴリズム入門
by
Yoichi Iwata
98 slides
51.5K views
PDF
明日使えないすごいビット演算
by
京大 マイコンクラブ
60 slides
66.5K views
PDF
深層強化学習と実装例
by
Deep Learning Lab(ディープラーニング・ラボ)
44 slides
4.2K views
PDF
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
25 slides
10.7K views
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
128 slides
35K views
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
51 slides
64.7K views
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
37 slides
28.7K views
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
67 slides
17.7K views
充足可能性問題のいろいろ
by
Hiroshi Yamashita
60 slides
8.4K views
自動定理証明の紹介
by
Masahiro Sakai
23 slides
8.6K views
SAT/SMTソルバの仕組み
by
Masahiro Sakai
51 slides
39.1K views
ブースティング入門
by
Retrieva inc.
33 slides
34.9K views
最適化超入門
by
Takami Sato
80 slides
203.2K views
【メタサーベイ】基盤モデル / Foundation Models
by
cvpaper. challenge
63 slides
20.6K views
Rolling Hashを殺す話
by
Nagisa Eto
26 slides
5.9K views
双対性
by
Yoichi Iwata
89 slides
29.8K views
色々なダイクストラ高速化
by
yosupo
35 slides
27.1K views
多様な強化学習の概念と課題認識
by
佑 甲野
38 slides
59.4K views
Convex Hull Trick
by
HCPC: 北海道大学競技プログラミングサークル
48 slides
4.1K views
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
by
Kenshi Abe
44 slides
13.2K views
指数時間アルゴリズム入門
by
Yoichi Iwata
98 slides
51.5K views
明日使えないすごいビット演算
by
京大 マイコンクラブ
60 slides
66.5K views
深層強化学習と実装例
by
Deep Learning Lab(ディープラーニング・ラボ)
44 slides
4.2K views
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
25 slides
10.7K views
Viewers also liked
PDF
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
by
Unity Technologies Japan K.K.
61 slides
4.8K views
PDF
An Internal of LINQ to Objects
by
Yoshifumi Kawai
57 slides
40.3K views
PDF
幾何コンテスト2013
by
Naoto Mizuno
67 slides
3.7K views
PDF
AtCoder Regular Contest 049 解説
by
AtCoder Inc.
39 slides
9.7K views
PDF
素集合データ構造
by
京大 マイコンクラブ
29 slides
6.6K views
PPTX
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
32 slides
17.9K views
PPTX
AtCoderに毎回参加したくなる仕組み
by
AtCoder Inc.
33 slides
12.9K views
PDF
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
94 slides
9.4K views
PPTX
TCO2017R1
by
AtCoder Inc.
19 slides
12.9K views
PDF
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
by
Unity Technologies Japan K.K.
150 slides
41.4K views
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
by
Unity Technologies Japan K.K.
61 slides
4.8K views
An Internal of LINQ to Objects
by
Yoshifumi Kawai
57 slides
40.3K views
幾何コンテスト2013
by
Naoto Mizuno
67 slides
3.7K views
AtCoder Regular Contest 049 解説
by
AtCoder Inc.
39 slides
9.7K views
素集合データ構造
by
京大 マイコンクラブ
29 slides
6.6K views
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
32 slides
17.9K views
AtCoderに毎回参加したくなる仕組み
by
AtCoder Inc.
33 slides
12.9K views
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
94 slides
9.4K views
TCO2017R1
by
AtCoder Inc.
19 slides
12.9K views
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
by
Unity Technologies Japan K.K.
150 slides
41.4K views
Similar to Union find(素集合データ構造)
PDF
データを工夫して記録するデータ構造
by
Katsutoshi Nagaoka
80 slides
2.1K views
PDF
PFDS 5.5 Pairing heap
by
昌平 村山
41 slides
882 views
PDF
130604 fpgax kibayos
by
Mikio Yoshida
46 slides
2.5K views
PDF
蟻本輪講 データ構造
by
HCPC: 北海道大学競技プログラミングサークル
40 slides
2.2K views
PDF
kibayos beaker-070829
by
Mikio Yoshida
24 slides
1.4K views
PPTX
私、木になります
by
gotoloop
9 slides
772 views
PPTX
IJPC-2 D問題解説
by
yutaka1999
21 slides
851 views
PDF
Ibisml2011 06-20
by
Yasuo Tabei
31 slides
908 views
KEY
形式手法とalloyの紹介
by
Daisuke Tanaka
51 slides
7.6K views
PDF
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
59 slides
2.5K views
PDF
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
107 slides
31.7K views
PPTX
サンプルで学ぶAlloy
by
NSaitoNmiri
58 slides
5.1K views
PDF
Nazoki
by
Ken Ogura
26 slides
7.8K views
PDF
Sharp2sat
by
oupc
14 slides
431 views
PPTX
Arc 010 d
by
Yuma Inoue
20 slides
1K views
PDF
Image Slide ( Animal Companion in Maze )
by
tadamasa yamaguchi
20 slides
333 views
PPTX
yyoshida thesis
by
Yuichi Yoshida
42 slides
4.2K views
PDF
130323 slide all
by
ikea0064
63 slides
319 views
KEY
Algebraic DP: 動的計画法を書きやすく
by
Hiromi Ishii
50 slides
6.8K views
PDF
WUPC2012
by
Dai Hamada
87 slides
1.8K views
データを工夫して記録するデータ構造
by
Katsutoshi Nagaoka
80 slides
2.1K views
PFDS 5.5 Pairing heap
by
昌平 村山
41 slides
882 views
130604 fpgax kibayos
by
Mikio Yoshida
46 slides
2.5K views
蟻本輪講 データ構造
by
HCPC: 北海道大学競技プログラミングサークル
40 slides
2.2K views
kibayos beaker-070829
by
Mikio Yoshida
24 slides
1.4K views
私、木になります
by
gotoloop
9 slides
772 views
IJPC-2 D問題解説
by
yutaka1999
21 slides
851 views
Ibisml2011 06-20
by
Yasuo Tabei
31 slides
908 views
形式手法とalloyの紹介
by
Daisuke Tanaka
51 slides
7.6K views
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
59 slides
2.5K views
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
107 slides
31.7K views
サンプルで学ぶAlloy
by
NSaitoNmiri
58 slides
5.1K views
Nazoki
by
Ken Ogura
26 slides
7.8K views
Sharp2sat
by
oupc
14 slides
431 views
Arc 010 d
by
Yuma Inoue
20 slides
1K views
Image Slide ( Animal Companion in Maze )
by
tadamasa yamaguchi
20 slides
333 views
yyoshida thesis
by
Yuichi Yoshida
42 slides
4.2K views
130323 slide all
by
ikea0064
63 slides
319 views
Algebraic DP: 動的計画法を書きやすく
by
Hiromi Ishii
50 slides
6.8K views
WUPC2012
by
Dai Hamada
87 slides
1.8K views
More from AtCoder Inc.
PDF
Square869120 contest #2
by
AtCoder Inc.
165 slides
4.2K views
PDF
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
37 slides
16.9K views
PDF
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
by
AtCoder Inc.
31 slides
3.5K views
PDF
Chokudai Contest 001
by
AtCoder Inc.
24 slides
4K views
PDF
AtCoder Regular Contest 048
by
AtCoder Inc.
45 slides
5.4K views
PDF
MUJINプログラミングチャレンジ2016 解説
by
AtCoder Inc.
37 slides
5.6K views
PDF
AtCoder Beginner Contest 033 解説
by
AtCoder Inc.
23 slides
11.3K views
PDF
DDPC 2016 予選 解説
by
AtCoder Inc.
51 slides
4.2K views
PDF
arc047
by
AtCoder Inc.
67 slides
7.6K views
PDF
abc032
by
AtCoder Inc.
44 slides
24.2K views
PDF
CODE FESTIVAL 2015 沖縄ツアー 解説
by
AtCoder Inc.
74 slides
2.4K views
PDF
AtCoder Regular Contest 046
by
AtCoder Inc.
46 slides
7.3K views
PDF
abc031
by
AtCoder Inc.
16 slides
9.3K views
PDF
CODE FESTIVAL 2015 解説
by
AtCoder Inc.
71 slides
5K views
PDF
CODE FESTIVAL 2015 予選B 解説
by
AtCoder Inc.
21 slides
5.8K views
PDF
AtCoder Beginner Contest 030 解説
by
AtCoder Inc.
20 slides
11.2K views
PDF
AtCoder Regular Contest 045 解説
by
AtCoder Inc.
73 slides
7.2K views
PDF
CODE FESTIVAL 2015 予選A 解説
by
AtCoder Inc.
20 slides
7.3K views
PDF
AtCoder Beginner Contest 029 解説
by
AtCoder Inc.
25 slides
14.9K views
PDF
AtCoder Regular Contest 044 解説
by
AtCoder Inc.
25 slides
5.7K views
Square869120 contest #2
by
AtCoder Inc.
165 slides
4.2K views
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
37 slides
16.9K views
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
by
AtCoder Inc.
31 slides
3.5K views
Chokudai Contest 001
by
AtCoder Inc.
24 slides
4K views
AtCoder Regular Contest 048
by
AtCoder Inc.
45 slides
5.4K views
MUJINプログラミングチャレンジ2016 解説
by
AtCoder Inc.
37 slides
5.6K views
AtCoder Beginner Contest 033 解説
by
AtCoder Inc.
23 slides
11.3K views
DDPC 2016 予選 解説
by
AtCoder Inc.
51 slides
4.2K views
arc047
by
AtCoder Inc.
67 slides
7.6K views
abc032
by
AtCoder Inc.
44 slides
24.2K views
CODE FESTIVAL 2015 沖縄ツアー 解説
by
AtCoder Inc.
74 slides
2.4K views
AtCoder Regular Contest 046
by
AtCoder Inc.
46 slides
7.3K views
abc031
by
AtCoder Inc.
16 slides
9.3K views
CODE FESTIVAL 2015 解説
by
AtCoder Inc.
71 slides
5K views
CODE FESTIVAL 2015 予選B 解説
by
AtCoder Inc.
21 slides
5.8K views
AtCoder Beginner Contest 030 解説
by
AtCoder Inc.
20 slides
11.2K views
AtCoder Regular Contest 045 解説
by
AtCoder Inc.
73 slides
7.2K views
CODE FESTIVAL 2015 予選A 解説
by
AtCoder Inc.
20 slides
7.3K views
AtCoder Beginner Contest 029 解説
by
AtCoder Inc.
25 slides
14.9K views
AtCoder Regular Contest 044 解説
by
AtCoder Inc.
25 slides
5.7K views
Union find(素集合データ構造)
1.
Union-Find (素集合データ構造)
2.
• グループ分けを管理する • はじめ,𝑛
個の物は全て別々のグループ • 次の 2 種類のクエリに対応する 1. 「まとめる」 2. 「判定」 Union-Find 木の機能 1 2 3 4 5
3.
クエリ 1:まとめる • 2
つのグループを 1 つにまとめる 1 2 1 2 1 3 2 4 6 1 2 3 4 6
4.
クエリ 2:判定 • 2
つの要素が同じグループに属しているかを判 定する 1 3 2 4 6 5 1 と 3 → true 1 と 2 → false
5.
素朴な実現法 (1/2) • 配列に,同じグループなら同じ数字を入れてお く 1
3 2 4 6 5 1 2 3 4 5 6 1 2 1 2 5 2
6.
素朴な実現法 (2/2) • この方針の問題点 –
グループをまとめる際に,𝑂(𝑛) 時間かかってしまう – 実際には,この方針でも少しの工夫でならし 𝑂(log 𝑛) 時間にできます http://topcoder.g.hatena.ne.jp/iwiwi/20131226/1388062106 • Union-Find 木は,もっと効率的に行う
7.
Union-Find 木 • グループを,1
つの木で表現する – したがって,全体では森 1 3 2 4 6 5 1 3 2 4 6 5
8.
クエリ1:「まとめる」 • 片方の木の根からもう片方の根に辺を張ればよ い 1 2 1 2 1 3 2 4
6 1 3 2 4 6 1 と 2 をまとめる 2 から 1 に辺を張る
9.
クエリ2:「判定」 • 2 つの要素を上に辿って,根が同じかどうかを 見ればよい 1 3 2 4
6 5 2 と 6 → 根は共に 2 → true 1 と 4 → 根は 1 と 2 → false
10.
Union-Find 木の効率 • 正当性:このやり方で,グループの判定はうま くできる •
効率:最悪の場合,この方法でも ツリーが縦長になると処理が遅く なってしまう → 効率化のテクニックを導入
11.
効率化工夫 1:経路圧縮 • 上向きに辿って再帰的に根を調べる際に,調べ たら辺を根に直接つなぎ直す •
4 の根を調べると,2, 3, 4 の根が 1 と分かる 1 2 3 4 1 2 3 4
12.
効率化工夫 2:ランク • 木の高さを持っておき,低い方を高い方に繋げ るようにする •
ただし,経路圧縮と組み合わせた際,経路圧縮による高 さの減少は無視する (つまり,ランクは経路圧縮しなかった場合の高さに相当する) 1 2 3 4 5 1 2 3 4 5 ランク 3 ランク 2 ランク 3
13.
Union-Find 木の計算量 • 2
つの工夫の両方をして 𝑂(𝛼(𝑛)) – 𝛼(𝑛) はアッカーマン関数 𝐴(𝑛, 𝑛) の逆関数 – 相当小さい(log より小さい!) • 片方だけでも,だいたい 𝑂(log 𝑛) – 経路圧縮のみが実装が楽でよい • これらはならし計算量
14.
Union-Find 木の実装(ランク無し) • 経路圧縮のみ(ランクは使わない) •
par[i] = i ならば根 – はじめは全部の頂点が根 int par[MAX_N]; // 親の番号 // n 要素で初期化 void init(int n) { for (int i = 0; i < n; i++) par[i] = i; }
15.
// 木の根を求める int root(int
x) { if (par[x] == x) { // 根 return x; } else { return par[x] = root(par[x]); // 経路圧縮 } } // x と y が同じ集合に属するか否か bool same(int x, int y) { return root(x) == root(y); } Union-Find 木の実装(ランク無し)
16.
// x と
y の属する集合を併合 void unite(int x, int y) { x = root(x); y = root(y); if (x == y) return; par[x] = y; } Union-Find 木の実装(ランク無し)
17.
Union-Find 木の実装(ランク有り) int par[MAX_N],
rank[MAX_N]; void init(int n) { for (int i = 0; i < n; i++) { par[i] = i; rank[i] = 0; } } int root(int x) { return par[x] == x ? x : par[x] = root(par[x]); } bool same(int x, int y) { return root(x) == root(y); } void unite(int x, int y) { x = root(x); y = root(y); if (x == y) return; if (rank[x] < rank[y]) { par[x] = y; } else { par[y] = x; if (rank[x] == rank[y]) rank[x]++; } }
18.
補足 • Union-Find 木はグループをまとめることはでき ても,分割することはできない 重要な制約 •
Union-Find 木を改造して機能を付加することが 必要になるような問題もあります