[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊น์ด ์ฐ์ ํ์(DFS)
Depth First Search
DFS๋ ๊ทธ๋ํ๋ฅผ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋ต์ผ๋ก, ํ ๋ ธ๋๋ก๋ถํฐ ์์ํด์ ์์๋ ธ๋๋ฅผ ๊ณ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ๋ ์ด์ ์์๋ ธ๋๊ฐ ๋ํ๋์ง ์์ ๋๊น์ง ์งํํ๊ณ ๋ ์ด์ ์๋ ๊ฐ ์์ ๋๋ ์๋ ๊ธธ์ ๋ค์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ํ์ํ์ง ์์ ๋ค๋ฅธ ๋ ธ๋๋ค์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
Algorithm Steps
DFS ๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง ๊ฐ์์์ ์๊ฐ๋ ๋ฐฉ๋ฒ์ ์๊น์ ํตํด ๊ฐ ๋ ธ๋์ ์ํ๋ฅผ ํํํ๊ณ , ํด๋น ๋ ธ๋๊ฐ ๋ฐ๊ฒฌ๋ ์๊ฐ(์ค์ ์๊ฐ์ ๊ธฐ๋กํ์ง ์๋๋ค), ํ์์ด ๋๋ ์๊ฐ์ ๊ธฐ๋กํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ ธ๋๋ค์ ์ํํ๋ค.
Node State
DFS๊ฐ ํ์ํ ๊ฐ ๋ ธ๋ ํน์ vertex ๋ ๋ค์ ์ธ๊ฐ ์ค ํ๋์ ์๊น๋ก ์ํ๋ฅผ ๋ํ๋ธ๋ค.
- White : ์์ง ๋ฐ๊ฒฌ๋์ง ์์ ๋ ธ๋
- Gray : ๋ฐ๊ฒฌ์ ๋์์ง๋ง ์์ง ํด๋น ๋ ธ๋์ ๋ชจ๋ ์์๊ณผ ์์ ๋ ธ๋๋ค์ ํ์ํ์ง ์์ ๋ ธ๋
- Black : ํด๋น ๋ ธ๋๋ก ๋ถํฐ ํ์๋ ๋ชจ๋ ์์ ๋ ธ๋๋ค์ ํ์์ด ๋๋ ๋ ธ๋
๊ฐ์ฅ ์ด๊ธฐ์๋ ๋์์ด ๋๋ ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋๋ค์ด ํฐ์์ผ๋ก ์ด๊ธฐํ ๋์ด ์์ ๊ฒ์ด๋ค.
Timestamp
๊ฐ ๋ ธ๋๋ค์ ์๊น๊ณผ ๋๋ถ์ด์ ๋ ์ข ๋ฅ์ timestamp๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ์ฌ๊ธฐ์ timestamp๋ ์ค์ ์๊ฐ์ด ์๋๋ผ ์ฒ๋ฆฌ๊ฐ ๋๋ ์์๋ฅผ ๊ธฐ๋กํ๊ฒ ๋๋ค.
- d[v] : discorvery time. ์ด๋ค ๋ ธ๋๊ฐ ๋ฐ๊ฒฌ๋ ์๊ฐ, ์ฆ color ์ํ๊ฐ white ์ด์๋ค๊ฐ gray ๊ฐ ๋ ์๊ฐ์ ๊ธฐ๋กํ๋ค.
- f[v] : finish time. ์ด๋ค ๋ ธ๋์ ํ์ ๋ ธ๋๋ค์ ํ์์ด ๋ชจ๋ ๋๋๊ณ ํด๋น ๋ ธ๋๋ก ๋ค์ ๋์์จ ์๊ฐ ์ฆ color ์ํ๊ฐ gray์์ black์ด ๋ ์๊ฐ์ ๊ธฐ๋กํ๋ค.
๋ฐ๋ผ์ ์ด๋ค ๋ ธ๋ v์ ๋ํด์ d[v]๋ ํญ์ f[v] ๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
Pseudo Code
DFS(V, E)
1 for each u in V
2 do color[u] = white
3 time = 0
4 for each u in V
5 do if color[u] = white
6 then DFS-VISIT(u)
์ pseudo code ๋ DFS๋ฅผ ์์ํ๋ ๋ ธ๋์ด๋ค. ์ด๋ค ๊ทธ๋ํ ์์ ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋์ด ์์ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๊ฐ์ ํธ๋ฆฌ๋ฅผ DFS๋ก ๊ฐ๊ฐ ํ์ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์๋ ์๋ค. 1~2 ๋ฒ์งธ ๋ผ์ธ์์๋ ์ฃผ์ด์ง ๊ทธ๋ํ ๋ด์ ์๋ ๋ชจ๋ ๋ ธ๋๋ค์ ํ๋์ฉ ๊บผ๋ด์ ๊ทธ ์๊น์ ํฐ์์ผ๋ก ์ด๊ธฐํ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ 3๋ฒ์งธ ๋ผ์ธ์์๋ ์ ์ญ๋ณ์๋ก ์ฌ์ฉ๋๋ time ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํํด์ค๋ค. ์ด ๋ณ์๋ timestamp๋ฅผ ๊ณ์ํด์ ๊ธฐ๋กํ๋๋ฐ ์ฌ์ฉํ๊ฒ ๋๋ค.
4 ~ 6์งธ ๋ผ์ธ์์๋ ๊ฐ ๋ ธ๋๋ค์ ๊ธฐ์ค์ผ๋ก ํธ๋ฆฌ๋ฅผ ๋ง๋๋ ค๋ ์๋๋ฅผ ํ๊ฒ ๋๋๋ฐ, ๋ง์ฝ ๋ชจ๋ ๋ ธ๋๋ค์ด ๋ค ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด, ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง ์ดํ์ ์๊น์ด ๊ฒ์์์ผ๋ก ๋ณ๊ฒฝ๋ ์ํ์ผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ๋ฐ๋ณตํ์ง ์๊ฒ๋๋ค. ๋ง์ฝ ๋ชจ๋ ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋์ด ์์ง ์๋ค๋ฉด ํฐ์์ผ๋ก ๋จ์์๋ ๋ ธ๋๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ก์ด ํธ๋ฆฌ๋ฅผ ๋ง๋๋ ์๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํ ์ ์๊ฒ ๋๋ค.
DFS-VISIT(u)
1 color[u] = gray
2 time = time + 1
3 d[u] = time
4 for each v in adj[u]
5 do if color[v] = white
6 then DFS-VISIT(v)
7 color[u] = black
8 time = time + 1
9 f[u] = time
์ด ํจ์๋ ์์ํจ์๋ก๋ถํฐ ์ ๋ฌ๋ ์์์ ์ด ๋ ๋ ธ๋๋ถํฐ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์์ํ๋ค. 1 ~ 3 ๋ฒ์งธ ๋ผ์ธ์์๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ธฐ ๋๋ฌธ์ ์ผ๋จ ์๊น์ gray๋ก ๋ณ๊ฒฝ์ํค๊ณ discovery time์ ๊ธฐ๋กํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น๋ ธ๋์ adjacency list, ์ฆ ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ ธ๋๋ฅผ ํ๋์ฉ ๊บผ๋ด๋ณด๊ณ ๋ง์ฝ ๊ทธ ๋ ธ๋๊ฐ ์์ง ๋ฐฉ๋ฌธ ๋์ง ์์ ๋ ธ๋๋ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์์์ ์ผ๋ก ์ฌ๊ท์ ์ผ๋ก ๊ฐ์ ์์ ์ ๋ฐ๋ณตํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๊ธฐ ์์ ๋ ธ๋๋ก๋ถํฐ ๋ ์ด์ ์๋ ๋ ธ๋๊ฐ ์์ ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ๋ ธ๋๋ค์ ์ฒดํฌํด์ค ์ ์์ ๊ฒ์ด๋ค.
Example
์ ์ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ํ์. ๋ง์ฝ ์ด๊ธฐ ๋ ธ๋๋ก 1๋ฒ ๋ ธ๋๋ฅผ ์ ํํ๊ณ dfs๋ฅผ ์์ํ๋ค๋ฉด,
๋ค์๊ณผ ๊ฐ์ด ์์๋ ธ๋๋ฅผ gray ๋ก ์์น ํ๊ณ discover time์ 1๋ก ์ค์ ํ๊ฒ ๋๋ค.
์ด์ 1๋ฒ ๋ ธ๋์ ์ฐ๊ฒฐ๋ 2๋ฒ๋ ธ๋๋ฅผ ์ ํํด์ ์ฌ๊ท์ ์ผ๋ก ๊ฐ์ ์์ ์ ์ํํ๋ค. 2๋ฒ๋ ธ๋๊ฐ ํฐ์์ด๋ฏ๋ก ํ์์ผ๋ก ์์น ํ๊ณ , discover ์๊ฐ์ 1 ์ฌ๋ ค์ 2๋ก ํ์ํด์ค๋ค.
๊ฐ์ ์์ ์ ๊ณ์ ์งํํ๋ฉด 3๋ฒ ๋ ธ๋๋ ์ด์ ๋ ์ด์ ๊ฐ ๊ณณ์ด ์์ผ๋ฏ๋ก black ์ผ๋ก ์น ํ๊ฒ ๋๊ณ backtrack ์ ํตํด์ ๋ถ๋ชจ๋ ธ๋๋ก ๋ค์ ์ฌ๋ผ๊ฐ๋ค.
๋ฆฌํด๋ ์ดํ์ 2๋ฒ ๋ ธ๋์ ๋ํ ์์๋ ธ๋๊ฐ ์์ง adjacency node ๋จ์์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ 5๋ฒ ๋ ธ๋๋ก ์ด๋ํ๋ค. ์ด๋ฐ ๊ณผ์ ์ ๊ณ์ํด์ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ํ๊ฐ ์์ฑ๋๋ค.
Algorithm Analysis
DFS ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ํํ๋ ์๊ฐ ๐ฉ(E + V) ์ ์๊ฐ๊ณผ ๊ฐ ๋ ธ๋์ ๋ํด adjacency list ๋ฅผ ๋ชจ๋ ํ์ธํ๋ ์๊ฐ ๐ฉ(E) ๋งํผ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ๋ฐ๋ผ์ DFS์ ์๊ฐ ๋ณต์ก๋๋ ๐ฉ(E + V) ๋ก ํํํ ์ ์๋ค.
'๐ฎ ์จ-์์ค > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ์๊ณ ๊ฒฝ๋ก(Critical Path) (0) | 2021.07.18 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊ฐํ ์ฐ๊ฒฐ ์์(Strongly Connected Component) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๋๋น ์ฐ์ ํ์(BFS) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๋ฐฐ๋ญ ๋ฌธ์ (Knapsack Problem) (7) | 2021.07.17 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ํํ๋ง ์ฝ๋(Huffman Code Problem) (0) | 2021.07.17 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote