Slide 1

Slide 1 text

Dominator Treeೖ໳ knshnb 2020/08/02 1

Slide 2

Slide 2 text

͸͡Ίʹ ✴ Dominator Treeͱ͸ʁ ‣ Flowgraphʹରͯ͠Ұҙʹఆ·Δ໦ߏ଄ ‣ ϓϩάϥϜͷσʔλϑϩʔΛղੳ͢Δจ຺Ͱग़ͯ͘Δ ‣ Lengauer & Tarjan͕ޮ཰తͳΞϧΰϦζϜΛൃݟ ✴ ࢀߟ ‣ ΦϦδφϧ࿦จ: “A Fast Algorithm for Finding Dominators in a Flowgraph” ‣ sigma͞Μͷϒϩά: http://sigma425.hatenablog.com/ entry/2015/12/25/224053 2

Slide 3

Slide 3 text

໨࣍ ✴ ൃද಺༰ ‣ Dominator Tree͕ఆٛͰ͖Δ͜ͱΛஸೡʹ ‣ ͷΞϧΰϦζϜઆ໌ ‣ Lengauer-TarjanͷΞϧΰϦζϜΛ͔Δʔʔʔ֓͘ཁઆ໌ ✴ Lengauer-TarjanͷΞϧΰϦζϜΛৄ͘͠஌Γ͍ͨํ͸sigma ͞Μͷϒϩά͕͓͢͢ΊͰ͢ ✴ ݩ࿦จ΋͔ͳΓಡΈ΍͍͢ʢূ໌શ෦௥ͬͯͳ͍͚Ͳ…ʣ O(nm) 3

Slide 4

Slide 4 text

Dominator Treeͷఆٛ 4

Slide 5

Slide 5 text

ఆٛ1 ✴ Flowgraph: ࢝఺͔Βશͯͷ௖఺ʹ౸ୡՄೳͳ༗޲άϥϑ ‣ ҎԼɺ࢝఺Λ ͱͨ͠FlowgraphΛߟ͑Δ ✴ ௖఺ ͕௖఺ Λdominate͢Δ: ͔Β ΁ͷ೚ҙͷύε͕ Λ ௨Δʢ ͸ Λdominate͠ɺ ͸ Λdominate͠ͳ͍΋ͷͱ͢ Δʣ ‣ Λdominate͢Δ௖఺ू߹Λ ͷdominatorͱݺͿ r d v r v d r d d d v v 5

Slide 6

Slide 6 text

Ex.1: ޓ͍ʹdominate͠ͳ͍ ✴ ʮ ͕ Λdominateʯ͔ͭʮ ͕ Λdominateʯ͸͋Γ͑ͳ͍ a b b a 6

Slide 7

Slide 7 text

Ex.1: ޓ͍ʹdominate͠ͳ͍ ✴ ʮ ͕ Λdominateʯ͔ͭʮ ͕ Λdominateʯ͸͋Γ͑ͳ͍ ‣ ূ໌: ͔Βద౰ʹdfsͯ͠ɺ ͔ ʹ͸͡Ίͯ౸ୡͨ͠ͱ͖ ͷύεΛߟ͑Δɻͦͷύε্ʹ΋͏ยํͷ௖఺͸ଘࡏ͠ͳ ͍ɺ͢ͳΘͪͲͪΒ͔͸΋͏ยํΛdominate͠ͳ͍ɻ a b b a r a b 7

Slide 8

Slide 8 text

Ex.2: dominateͷਪҠ཯ ✴ ͕ Λdominate, ͕ Λdominate ͕ Λdominate a b b c ⇒ a c 8

Slide 9

Slide 9 text

Ex.2: dominateͷਪҠ཯ ✴ ͕ Λdominate, ͕ Λdominate ͕ Λdominate ‣ ূ໌: ೚ҙͷ ύε্ʹ ͕ଘࡏɻͦͷ ্ʹ͸ඞͣ ͕ଘࡏ͢ΔɻΑͬͯ ͸ Λdominate͢Δɻ a b b c ⇒ a c r − c b r − b a a c 9

Slide 10

Slide 10 text

Ex.3: dominator಺ͷશॱং ✴ ϧʔϓͷͳ͍શͯͷ ύεʹ͓͍ͯɺ ͷdominatorͷݱ ΕΔॱং͸ಉ͡Ͱ͋Δ r − v v 10

Slide 11

Slide 11 text

Ex.3: dominator಺ͷશॱং ✴ ϧʔϓͷͳ͍શͯͷ ύεʹ͓͍ͯɺ ͷdominatorͷݱ ΕΔॱং͸ಉ͡Ͱ͋Δ ‣ ূ໌: Λ ͷdominatorͱͯ͠ɺϧʔϓͷͳ͍ύε(1) ͱ(2) ͕ଘࡏ͢ΔͱԾఆ͢Δɻ (1)ΑΓ ͔Β Λ௨Βͣʹ ʹ౸ୡͰ͖Δ͕ɺ͜Εͱ(2)ΑΓ ͕dominatorͰ͋Δ͜ͱʹໃ६ɻ ✴ ͜ΕʹΑͬͯdominatorͳ͍ͷશॱং͕ఆٛͰ͖Δ r − v v a, b v r − a − b − v r − b − a − v b a v a 11

Slide 12

Slide 12 text

ఆٛ2 ✴ ͷimmediate dominator: ͷdominatorͰ͋ͬͯɺEx.3ͷશ ॱংͰ࠷΋ޙΖͷ΋ͷʢ ʹ͍ۙ΋ͷʣ ‣ ఆٛΑΓɺ Ҏ֎ʹ͍ͭͯҰҙʹଘࡏ͢Δ • ͱද͢ ‣ ಉ஋ͳఆٛ: ͷdominatorͰ͋ͬͯͦͷଞͷdominatorશ ͯʹdominate͞ΕΔ΋ͷ v v v r idom(v) v 12

Slide 13

Slide 13 text

ex.4: ด࿏Λ࣋ͨͳ͍ ✴ ͷͱ͖ͷΈ ͔Β ʹลΛషͬͨάϥϑ͸ด࿏ Λ࣋ͨͳ͍ w = idom(v) w v 13

Slide 14

Slide 14 text

ex.4: ด࿏Λ࣋ͨͳ͍ ✴ ͷͱ͖ͷΈ ͔Β ʹลΛషͬͨάϥϑ͸ด࿏ Λ࣋ͨͳ͍ ‣ ด࿏Λ࣋ͭͱԾఆ͢ΔɻdominateͷਪҠ཯ΑΓɺด࿏಺ ͷ͋Δ௖఺ ͔ΒลΛͨͲ͍ͬͯ͘͜ͱͰɺ ͕ࣗ਎Λ dominate͍ͯ͠Δ͜ͱʹͳΓໃ६ɻ w = idom(v) w v v v 14

Slide 15

Slide 15 text

Dominator Tree ✴ ͷͱ͖ͷΈ ͔Β ʹลΛషͬͨάϥϑ͸ɺ Ҏ ֎ͷ਌͕Ұҙʹఆ·Γɺด࿏Λ࣋ͨͳ͍ɻ͜Ε͸ Λࠜͱ͠ ͨࠜ෇͖໦ʹͳΔɻ w = idom(v) w v r r 15

Slide 16

Slide 16 text

Dominator TreeΛٻΊΔ ΞϧΰϦζϜ 16

Slide 17

Slide 17 text

۪௚ͳΞϧΰϦζϜ ✴ ͕ Λdominate Λফͨ͠άϥϑͰ ͔Β ʹ౸ୡෆೳ ✴ ͷΞϧΰϦζϜ 1. ֤௖఺Λফͨ͠άϥϑͰ ͔ΒdfsͳͲͰ౸ୡ൑ఆ͢Δ͜ ͱͰɺ ௨Γͷdominateؔ܎͕Θ͔Δ 2. ֤௖఺ʹ͍ͭͯɺ1Λ༻͍ͯimmediate dominatorΛٻΊ Δɻ͜Ε͸dominator಺Ͱͦͷଞͷdominatorશͯʹ dominate͞Ε͍ͯΔ΋ͷͰ͋Δ d v ⇔ d r v O(nm) r n2 17

Slide 18

Slide 18 text

Lengauer-TarjanͷΞϧΰϦζϜ ✴ semidominatorͱ͍͏֓೦Λఆٛͯ͠ɺͦΕʹؔ͢Δ͍͢͝ ੑ࣭Λ࢖͍·͢ ✴ ΞϧΰϦζϜ֓ཁ 1. Λࠜͱ͢Δdfs໦Λ࡞ͬͯ๚Εͨॱʹ൪߸Λ;Δ 2. semidominatorΛٻΊΔʢdfsٯॱʣ 3. semidominator͔Βimmediate dominatorΛٻΊΔͷʹ ඞཁͳ௖఺ΛٻΊΔʢdfsٯॱʣ 4. Immediate dominatorΛٻΊΔʢdfsॱʣ ✴ ܭࢉྔ͸ ɺ΋ͬͱؤுΔͱ r O(m log(n)) O(mα(m, n)) 18

Slide 19

Slide 19 text

࣮૷্ͷ஫ҙ ✴ root͔Β֤௖఺·Ͱͷύε্ͷminΛ؅ཧͰ͖ΔUnionFindΛ ࢖͍·͢ ‣ ৄ͘͠͸http://sigma425.hatenablog.com/entry/ 2015/12/07/185047 ✴ ΋ͱ΋ͱͷ௖఺൪߸͔dfsॱͷ൪߸͔͕ͪ͝Όͪ͝ΌʹͳΓ ͕ͪ ‣ ݸਓతʹ͸શ෦൪߸ৼΓ௚ͪ͠Ό͏΄͏͕ϥΫͰͨ͠ ✴ ࣮૷: https://knshnb.github.io/competitive_library/library/src/ Graph/DominatorTree.hpp.html ✴ ݁ߏେมͰͨ͠… 19

Slide 20

Slide 20 text

ऴΘΓʹ ✴ “The fast algorithm is … but almost as easy to program as the other two algorithms, …” ‣Lengauer͞ΜTarjan͞Μਖ਼ؾ ͔ʁʁʁ 20