UnionFindとは
by
machio
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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で一致するので同一グループだと分かる 根 根