UnionFindとは
by
machio
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
P1 ©Techouse All Rights Reserved UnionFind(素集合データ構造 )とは
Slide 2
Slide 2 text
P2 ©Techouse All Rights Reserved UnionFindとは グループ分けを効率的に管理するデータ構造
Slide 3
Slide 3 text
P3 ©Techouse All Rights Reserved UnionFindを用いると 例えば、フットサルのチーム分けなどを効率的に行える
Slide 4
Slide 4 text
P4 ©Techouse All Rights Reserved UnionFindが提供する操作は次の 2種類だけ 1. 「まとめる」 2. 「判定」
Slide 5
Slide 5 text
P5 ©Techouse All Rights Reserved ● n個の要素があるとする ● 最初、n個の要素は全て別々のグループ 1 2 3 4 5
Slide 6
Slide 6 text
P6 ©Techouse All Rights Reserved 操作1. 「まとめる」
Slide 7
Slide 7 text
P7 ©Techouse All Rights Reserved 2つのグループを 1つにまとめる 1 2 3 4 5
Slide 8
Slide 8 text
P8 ©Techouse All Rights Reserved 1 2 3 4 5 2つのグループを 1つにまとめる
Slide 9
Slide 9 text
P9 ©Techouse All Rights Reserved 1 2 3 4 5 1 2 2つのグループを 1つにまとめる
Slide 10
Slide 10 text
P10 ©Techouse All Rights Reserved 1 2 3 4 5 1 2 2つのグループを 1つにまとめる
Slide 11
Slide 11 text
P11 ©Techouse All Rights Reserved 1 2 3 4 5 1 2 3 4 5 2つのグループを 1つにまとめる
Slide 12
Slide 12 text
P12 ©Techouse All Rights Reserved 操作2. 「判定」
Slide 13
Slide 13 text
P13 ©Techouse All Rights Reserved 1 3 2 4 6 5 1と3 → true 1と2 → false 2つの要素が同じグループに属しているかを判定する
Slide 14
Slide 14 text
P14 ©Techouse All Rights Reserved おさらいすると
Slide 15
Slide 15 text
P15 ©Techouse All Rights Reserved UnionFindは 「まとめる」「判定」 2種類の操作のみで グループ分けを行う
Slide 16
Slide 16 text
P16 ©Techouse All Rights Reserved 皆さんは「まとめる」「判定」の 2種類の操作で グループ分けを効率的に行えることを 直感的に理解できるはず
Slide 17
Slide 17 text
P17 ©Techouse All Rights Reserved というのも これまで何度も UnionFindと 同じことをやってきている
Slide 18
Slide 18 text
P18 ©Techouse All Rights Reserved 例えば、フットサルのチーム分け
Slide 19
Slide 19 text
P19 ©Techouse All Rights Reserved チーム分けを抽選やグーチョキパー で決めたら
Slide 20
Slide 20 text
P20 ©Techouse All Rights Reserved 手当たり次第、 「あなたはどのチームですか?」 と周りの人に質問しますよね
Slide 21
Slide 21 text
P21 ©Techouse All Rights Reserved これが、UnionFindの「判定」です
Slide 22
Slide 22 text
P22 ©Techouse All Rights Reserved 「判定」の結果、 同じチームであることが分かったら その人と一緒に固まりますよね?
Slide 23
Slide 23 text
P23 ©Techouse All Rights Reserved これが、「まとめる」です
Slide 24
Slide 24 text
P24 ©Techouse All Rights Reserved これで小グループができていきます
Slide 25
Slide 25 text
P25 ©Techouse All Rights Reserved 小グループの誰かが、別グループの誰かと話して (=判定) 同じグループであることが分かった場合、 二つのグループでまとまって より大きな 1つのグループとして固まりますよね
Slide 26
Slide 26 text
P26 ©Techouse All Rights Reserved UnionFindの仕組みは、これと同じです
Slide 27
Slide 27 text
P27 ©Techouse All Rights Reserved では、具体的にどう実現するか
Slide 28
Slide 28 text
P28 ©Techouse All Rights Reserved グループを木構造で扱います
Slide 29
Slide 29 text
P29 ©Techouse All Rights Reserved 木構造とは
Slide 30
Slide 30 text
P30 ©Techouse All Rights Reserved 根 root 節 node 節 node 葉 reaf 葉 reaf 葉 reaf 葉 reaf ● 階層を持ったデータ構造 ● 1つの親から複数の子がぶら下 がるような構造
Slide 31
Slide 31 text
P31 ©Techouse All Rights Reserved 1 3 2 4 6 5 7
Slide 32
Slide 32 text
P32 ©Techouse All Rights Reserved 2 4 6 5 1 3 7
Slide 33
Slide 33 text
P33 ©Techouse All Rights Reserved 2 4 6 5 5 1 3 2 4 6 1 3 7 7
Slide 34
Slide 34 text
P34 ©Techouse All Rights Reserved 2 4 6 5 5 1 3 2 4 6 各ノード(要素)は親を1つ持つ 1 3 7 7
Slide 35
Slide 35 text
P35 ©Techouse All Rights Reserved 1 3 2 4 6 5 5 1 3 2 4 6 各ノード(要素)は親を1つ持つ 3の親 4と6の親 5自身の親 7 7の親
Slide 36
Slide 36 text
P36 ©Techouse All Rights Reserved 「まとめる」操作をどう実現するか
Slide 37
Slide 37 text
P37 ©Techouse All Rights Reserved 「まとめる」操作をどう実現するか 片方の根からもう片方の根に 辺(リンク)を張れば良い
Slide 38
Slide 38 text
P38 ©Techouse All Rights Reserved 1 2 1 3 6 2 4
Slide 39
Slide 39 text
P39 ©Techouse All Rights Reserved 1 2 1 3 6 2 4
Slide 40
Slide 40 text
P40 ©Techouse All Rights Reserved 1 2 1 1 3 6 2 4
Slide 41
Slide 41 text
P41 ©Techouse All Rights Reserved 1 2 1 2 1 3 6 2 4
Slide 42
Slide 42 text
P42 ©Techouse All Rights Reserved 1 2 1 3 6 2 4 1 2
Slide 43
Slide 43 text
P43 ©Techouse All Rights Reserved 1 2 1 3 6 2 4 1 2 6 2 4
Slide 44
Slide 44 text
P44 ©Techouse All Rights Reserved 1 2 1 3 6 2 4 1 2 6 2 4 1 3
Slide 45
Slide 45 text
P45 ©Techouse All Rights Reserved 「判定」操作をどう実現するか
Slide 46
Slide 46 text
P46 ©Techouse All Rights Reserved 「判定」操作をどう実現するか 2つの要素の親をたどり、 根が同じかどうかを見れば良い
Slide 47
Slide 47 text
P47 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する
Slide 48
Slide 48 text
P48 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の親を辿っていく
Slide 49
Slide 49 text
P49 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の親を辿っていく 親
Slide 50
Slide 50 text
P50 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の親を辿っていく 親 親
Slide 51
Slide 51 text
P51 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の親を辿っていく 根 親 親
Slide 52
Slide 52 text
P52 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の根 => 1 根 親 親
Slide 53
Slide 53 text
P53 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の根 => 1 7の親を辿っていく 根
Slide 54
Slide 54 text
P54 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の根 => 1 7の親を辿っていく 根 親
Slide 55
Slide 55 text
P55 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の根 => 1 7の親を辿っていく 根 親 親
Slide 56
Slide 56 text
P56 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の根 => 1 7の親を辿っていく 根 親 親 根
Slide 57
Slide 57 text
P57 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7が同じグループか「判定」する 5の根 => 1 7の根 => 2 根 親 親 根
Slide 58
Slide 58 text
P58 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7は所属する木 (グループ)の 根(代表元)が一致しない 根 根
Slide 59
Slide 59 text
P59 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 5と7は所属する木 (グループ)の 根(代表元)が一致しない つまり、別グループである 根 根
Slide 60
Slide 60 text
P60 ©Techouse All Rights Reserved 1 3 6 2 4 5 7 逆に、例えば 4と7は根が2で一致するので同一グループだと分かる 根 根