DFS Tree
2020-1ํ๊ธฐ, ๋ํ์์ โ์๊ณ ๋ฆฌ์ฆโ ์์ ์ ๋ฃ๊ณ ๊ณต๋ถํ ๋ฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
๋ฐฉํฅ์ฑ์ด ์๋ <Directed Graph>๋ฅผ DFS ๋ฐฉ์์ผ๋ก ์์ํ๊ฒ ๋๋ฉด, ์ฐ๋ฆฌ๋ ๋ฐฉ๋ฌธ ์์์ ๋ฐ๋ฅธ Traversal Tree๋ฅผ ์ป๊ฒ ๋๋ค. ์ด ํธ๋ฆฌ๋ฅผ ์ด๋ฃจ๋ ๊ฐ vertex ๊ทธ๋ฆฌ๊ณ edge์ ์ด๋ฆ์ ๋ถ์ด๊ณ ๋ถ๋ฅ๋ฅผ ํด๋ณผ ์ ์๋ค!! ํ๋ฒ ์ดํด๋ณด์!!
Terminology.
๋จผ์ vertex์ ๋ํ ์ฉ์ด๋ถํฐ ์ดํด๋ณด์. ๊ฐ vertex๋ <root>, <descendant>, <ancestor>, <parent>, <child> ๋ฑ์ ์ฉ์ด๊ฐ ์๋ค. ์ฌ์ด ๊ฐ๋ ์ด๋ผ ๋ฐ๋ก ์ค๋ช ์ ํ์ง ์๊ฒ ๋ค.
๋ค์์ edge ๋ค์ ๋ํ ์ฉ์ด๋ฅผ ์ดํด๋ณด์. ๋จผ์ ์ฉ์ด๋ฅผ ์ ์ํ๋ฉด, <tree edge>, <forward edge>, <back edge>, <cross edge>๊ฐ ์๋ค.
๋จผ์ <tree edge>๋ ๋ง ๊ทธ๋๋ก DFS tree๋ฅผ ์ด๋ฃจ๋ edge๋ฅผ ๋งํ๋ค.
๋ค์์ผ๋ก <backward edge>๋ DFS ์ํ ๊ณผ์ ์์ ํด๋น edge๊ฐ ์ด๋ฏธ ๋ฐฉ๋ฌธํ vertex๋ฅผ ๋ฐฉ๋ฌธํ๊ฒ ๋ง๋๋ edge ์ผ๋, <backward edge>๋ผ๊ณ ํ๋ค. <forward edge>์ญ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ vertex๋ฅผ ๋ฐฉ๋ฌธํ๊ฒ ๋ง๋๋ edge์ง๋ง, ์ด ๊ฒฝ์ฐ ๊ทธ ๋ฐฉํฅ์ด (ancestor โ descendent) ๋ฐฉํฅ์ด๋ค. backward edge๋ (ancestor โ descendent)๋ ๋ง ๊ทธ๋๋ก backwarding ํ๋ edge์ธ ๊ฒ์ด๋ค!
<cross edge>๋ผ๋ ๊ฒ๋ ์๋ค. ์ด ๊ฒฝ์ฐ, ๊ณตํต๋ ancestor๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์ด๊ฒ์ <cross edge>๋ผ๊ณ ํ๋ค.
์ฌ์ค ์๋์ ๊ฐ์ ๊ณต์์ด ์๊ธด ํ๋ฐ, ๋ณธ์ธ์ ์ด ๊ณต์๋ณด๋ค๋ (ancestor-descendent) ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก edge๋ฅผ ๋ถ๋ฅํ๋ ํธ์ด๋ค. ์๋ํ๋ฉด, ์๋์ ๊ณต์์ ์ฐ๋ฉด, ๋ณธ์ธ ๊ธฐ์ค์ผ๋ก <cross edge>๊ฐ well-define ๋์ง ์๋ ๋๋์ด ๋ค๊ธฐ ๋๋ฌธ์ด๋ค;; ๐ค
์ ์ด์ Directed Graph์์ DFS ํ์ ๋, ๊ฐ edge๋ฅผ ๋ช ๋ช ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ดค๋ค. ํ์ง๋ง, ์ด๋ฐ ์๋ฌธ์ด ๋ ๋ค.
๊ทธ์ ๋ํ ๋ต์ <DAG Directed Acyclic Graph>์ ์๋ค!! ์ฐ๋ฆฌ๋ Direct Graph๊ฐ cycle์ ๊ฐ์ง๋์ง ํ๋จํ๊ธฐ ์ํด DFS tree์ edge๋ค์ ํ์ฉํ ์ ์๋ค.
Property.
A directed graph has a cycle if and only if its DFS reveals a back edge
์ฆ, ๋ง์ฝ DFS๋ก Directed Graph๋ฅผ ์ํํ๋๋ฐ, back edge๊ฐ ๋ฐ๊ฒฌ๋๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ Directed Graph๊ฐ DAG๊ฐ ์๋์ ์ ์ ์๋ค!!
DFS๋ DAG๋ฅผ ํํํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์๋ค!! DAG๋ <linearization>์ด๋ผ๋ ๊ณผ์ ์ ํตํด DAG๋ฅผ ์ ํ์ sequence๋ก ํํํ ์ ์๋ค!! ์ด๋, ์ด ์ ํ์ sequence๋ฅผ DAG๋ฅผ DFS๋ก ์ํํ๋ ์์๋ก ์์ฑํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ด seq.๋ฅผ ๋ณด๊ณ DAG๋ฅผ ๋ณต์ํ ์ ์๋ค.