๋ถ๋ฅ:ํ์ ์๊ณ ๋ฆฌ์ฆ
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
DFS์์ ๋์ด์ด
1. ๊ฐ์[ํธ์ง]
Depth First Search. ํํ ์ค์ฌ์ DFS๋ก ์ด๋ค. ํ๊ตญ์ด ํ๊ธฐ๋ ๊น์ด ์ฐ์ ํ์.
๊ฑฐ์ ํญ์ ๋์ด์ฐ์ ํ์(BFS; Breadth First Search)๊ณผ ๋น๊ต๋์ด ๋์จ๋ค.
๊ฑฐ์ ํญ์ ๋์ด์ฐ์ ํ์(BFS; Breadth First Search)๊ณผ ๋น๊ต๋์ด ๋์จ๋ค.
2. ์์ธ[ํธ์ง]
ํธ๋ฆฌ๋ ๊ทธ๋ํ์์ ํ ๋ฃจํธ๋ก ํ์ํ๋ค๊ฐ ํน์ ์ํฉ์์ ์ต๋ํ ๊น์ํ ๋ค์ด๊ฐ์ ํ์ธํ ๋ค ๋ค์ ๋์๊ฐ ๋ค๋ฅธ ๋ฃจํธ๋ก ํ์ํ๋ ๋ฐฉ์์ด๋ค. ๋ํ์ ์ผ๋ก ๋ฐฑํธ๋ํน์ ์ฌ์ฉํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ทํธ์ถ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ์ง๋ง, ๋จ์ํ ์คํ ๋ฐฐ์ด๋ก ๊ตฌํํ๊ธฐ๋ ํ๋ค. ๊ตฌ์กฐ์ ์คํ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ์ํด์ผ ํ๋ค.[1]
๊ฐ๋ฆผ๊ธธ์ด ๋ํ๋ ๋๋ง๋ค '๋ค๋ฅธ ๊ธธ์ด ์๋ค'๋ ์ ๋ณด๋ง ๊ธฐ๋กํ๋ฉด์ ์์ ์ด ์ง๋๊ฐ ๊ธธ์ ์ง์๋๊ฐ๋ค. ๊ทธ๋ฌ๋ค ๋ง๋ค๋ฅธ ๊ณณ์ ๋๋ฌํ๋ฉด ์ง์ ๊ฐ๋ฆผ๊ธธ๊น์ง ๋์๊ฐ๋ฉด์ '์ด ๊ธธ์ ์๋'์ด๋ผ๋ ํ์์ ๋จ๊ธด๋ค. ๊ทธ๋ ๊ฒ ๊ฐ๋ฆผ๊ธธ์ ์์ฐจ์ ์ผ๋ก ํ์ํด ๋๊ฐ๋ค ๋ชฉ์ ์ง๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๊ทธ๋๋ก ํด๋ต์ ๋ด๊ณ ์ข ๋ฃ.
๋จ์ ๊ฒ์ ์๋ ์์ฒด๋ BFS์ ๋นํด์ ๋๋ฆฌ๋ค. ํ์ง๋ง ๊ฒ์์ด ์๋ ํธ๋๋ฒ์ค(traverse)๋ฅผ ํ ๊ฒฝ์ฐ๋ ๋ง์ด ์ฐ์ธ๋ค. DFS๋ ํนํ ๋ฆฌํ ๋ ธ๋์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ ๋ ฌ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ํญ์ ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ๋ฌธํ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ฐฑํธ๋ํน์ ์ฌ์ฉ๋๋ ์ด์ ๋ ๊ณตํต ์์๋ฅผ ๊ฐ์ง๋ ์๋ ๋ฆฌํ ๋ ธ๋๋ค์ ํ๋ฐฉ์ ์๋ผ ๋ด ๋ฒ๋ฆฌ๋๊ฒ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ ๋ฏธ๋ก ์์ฑ์ ๋ง์ด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ๋ ํ๋ค. ๋ฐฉํฅ์ ๋ฌด์์๋ก ํด์ ๊ณ์ ๋ซ๋ค๊ฐ ๋งํ์ ๋ชป ๋ซ์ผ๋ฉด ๋ซ์ ์ ์๋ ๊ณณ์ด ๋ฐ๊ฒฌ๋ ๋๊น์ง ๋๋์๊ฐ์ ๋ค์ ๋ซ๊ณ , ๋ ๋งํ๋ฉด ๋๋์๊ฐ๊ณ ์ด๋ฐ ์์ผ๋ก ๋ฌดํํ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด ์๊ธด๋ค. ๊ฒ๋ค๊ฐ ์ด ๋ฐฉ์์ผ๋ก ๋ฏธ๋ก๋ฅผ ๋ง๋ค๋ฉด ๋น ์ ธ๋๊ฐ๋ ๊ฒฝ๋ก ๋ํ ๋จ ํ๋๋ง ์๊ธด๋ค. ์ง์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด ๋์์์ ๋ณด์.
DFS๋ฅผ ์๋ง ์ด์ฉํ๋ฉด ๋ฐฉํฅ ์๋ ๊ทธ๋ํ์์ ์ฌ์ดํด(cycle)์ด ์๋์ง ํ๋จํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ์ฆ ์ด๋ค ํ ์์์ ๋ ธ๋์์ ๊ธธ์ ๋ฐ๋ผ ๊ฐ๋ณด๋ฉด ์๊ธฐ ์์ ์ผ๋ก ๋์์ฌ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋์ง ํ์ธํ ์ ์๋ค.
๊ฐ๋ฆผ๊ธธ์ด ๋ํ๋ ๋๋ง๋ค '๋ค๋ฅธ ๊ธธ์ด ์๋ค'๋ ์ ๋ณด๋ง ๊ธฐ๋กํ๋ฉด์ ์์ ์ด ์ง๋๊ฐ ๊ธธ์ ์ง์๋๊ฐ๋ค. ๊ทธ๋ฌ๋ค ๋ง๋ค๋ฅธ ๊ณณ์ ๋๋ฌํ๋ฉด ์ง์ ๊ฐ๋ฆผ๊ธธ๊น์ง ๋์๊ฐ๋ฉด์ '์ด ๊ธธ์ ์๋'์ด๋ผ๋ ํ์์ ๋จ๊ธด๋ค. ๊ทธ๋ ๊ฒ ๊ฐ๋ฆผ๊ธธ์ ์์ฐจ์ ์ผ๋ก ํ์ํด ๋๊ฐ๋ค ๋ชฉ์ ์ง๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๊ทธ๋๋ก ํด๋ต์ ๋ด๊ณ ์ข ๋ฃ.
๋จ์ ๊ฒ์ ์๋ ์์ฒด๋ BFS์ ๋นํด์ ๋๋ฆฌ๋ค. ํ์ง๋ง ๊ฒ์์ด ์๋ ํธ๋๋ฒ์ค(traverse)๋ฅผ ํ ๊ฒฝ์ฐ๋ ๋ง์ด ์ฐ์ธ๋ค. DFS๋ ํนํ ๋ฆฌํ ๋ ธ๋์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ ๋ ฌ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ํญ์ ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ๋ฌธํ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ฐฑํธ๋ํน์ ์ฌ์ฉ๋๋ ์ด์ ๋ ๊ณตํต ์์๋ฅผ ๊ฐ์ง๋ ์๋ ๋ฆฌํ ๋ ธ๋๋ค์ ํ๋ฐฉ์ ์๋ผ ๋ด ๋ฒ๋ฆฌ๋๊ฒ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ ๋ฏธ๋ก ์์ฑ์ ๋ง์ด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ๋ ํ๋ค. ๋ฐฉํฅ์ ๋ฌด์์๋ก ํด์ ๊ณ์ ๋ซ๋ค๊ฐ ๋งํ์ ๋ชป ๋ซ์ผ๋ฉด ๋ซ์ ์ ์๋ ๊ณณ์ด ๋ฐ๊ฒฌ๋ ๋๊น์ง ๋๋์๊ฐ์ ๋ค์ ๋ซ๊ณ , ๋ ๋งํ๋ฉด ๋๋์๊ฐ๊ณ ์ด๋ฐ ์์ผ๋ก ๋ฌดํํ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด ์๊ธด๋ค. ๊ฒ๋ค๊ฐ ์ด ๋ฐฉ์์ผ๋ก ๋ฏธ๋ก๋ฅผ ๋ง๋ค๋ฉด ๋น ์ ธ๋๊ฐ๋ ๊ฒฝ๋ก ๋ํ ๋จ ํ๋๋ง ์๊ธด๋ค. ์ง์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด ๋์์์ ๋ณด์.
DFS๋ฅผ ์๋ง ์ด์ฉํ๋ฉด ๋ฐฉํฅ ์๋ ๊ทธ๋ํ์์ ์ฌ์ดํด(cycle)์ด ์๋์ง ํ๋จํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ์ฆ ์ด๋ค ํ ์์์ ๋ ธ๋์์ ๊ธธ์ ๋ฐ๋ผ ๊ฐ๋ณด๋ฉด ์๊ธฐ ์์ ์ผ๋ก ๋์์ฌ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋์ง ํ์ธํ ์ ์๋ค.
3. ์ฅ๋จ์ [ํธ์ง]
3.1. ์ฅ์ [ํธ์ง]
- ๋จ์ง ํ ๊ฒฝ๋ก์์ ๋ ธ๋๋ค๋ง์ ๊ธฐ์ตํ๋ฉด ๋๋ฏ๋ก ์ ์ฅ ๊ณต๊ฐ์ ์์๊ฐ ๋น๊ต์ ์ ๋ค.
- ๋ชฉํ ๋ ธ๋๊ฐ ๊น์ ๋จ๊ณ์ ์์ ๊ฒฝ์ฐ ํด๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ ์ ์๋ค.
3.2. ๋จ์ [ํธ์ง]
- ํด๊ฐ ์๋ ๊ฒฝ๋ก์ ๊น์ด ๋น ์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ฐ๋ผ์ ์ค์ ๋ก๋ ๋ฏธ๋ฆฌ ์ง์ ํ ์์ ๊น์ด๊น์ง๋ง ํ์ํ๊ณ ๋ชฉํ ๋ ธ๋๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ฉด ๋ค์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ํ์ํ๋ ๋ฐฉ๋ฒ์ด ์ ์ฉํ ์ ์๋ค.
- ์ป์ด์ง ํด๊ฐ ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋๋ค๋ ๋ณด์ฅ์ด ์๋ค. ์ด๋ ๋ชฉํ์ ์ด๋ฅด๋ ๊ฒฝ๋ก๊ฐ ๋ค์์ธ ๋ฌธ์ ์ ๋ํด ๊น์ด์ฐ์ ํ์์ ํด์ ๋ค๋ค๋ฅด๋ฉด ํ์์ ๋๋ด๋ฒ๋ฆฌ๋ฏ๋ก, ์ด๋ ์ป์ด์ง ํด๋ ์ต์ ์ด ์๋ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
4. DFS ํธ๋ฆฌ[ํธ์ง]
ํ ์ ์ ์ ๋๋ฒ ์ด์ ๋ฐฉ๋ฌธํ์ง ์๋ ์ฐ๊ฒฐ๊ทธ๋ํ์์ DFSํธ๋ฆฌ๋ผ๋ ์ ํฅํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ค.
- Tree edge๋ DFS์ค a์ ์ ์ ๋ฐฉ๋ฌธํ ํ b์ ์ ์ ์ฒ์ ๋ฐฉ๋ฌธํ ๋, aโb์ ์ ํฅ๊ฐ์ ์ ๋งํ๋ค.
- Back edge๋ DFS์ค a์ ์ ์ ๋ฐฉ๋ฌธํ ํ ์ด๋ฏธ ๋ฐฉ๋ฌธํ b ์ ์ ์ ๋ฐฉ๋ฌธํ ๋, b๊ฐ a์ ์กฐ์์ผ ๋ aโb์ ์ ํฅ๊ฐ์ ์ ๋งํ๋ค,
- Forward edge๋ DFS์ค a์ ์ ์ ๋ฐฉ๋ฌธํ ํ ์ด๋ฏธ ๋ฐฉ๋ฌธํ b ์ ์ ์ ๋ฐฉ๋ฌธํ ๋, a๊ฐ b์ ์กฐ์์ผ ๋ aโb์ ์ ํฅ๊ฐ์ ์ ๋งํ๋ค.
- Cross edge๋ DFS์ค a์ ์ ์ ๋ฐฉ๋ฌธํ ํ ์ด๋ฏธ ๋ฐฉ๋ฌธํ b ์ ์ ์ ๋ฐฉ๋ฌธํ ๋, aโb์ ์ ํฅ๊ฐ์ ์ด Back edge๋ Forward edge๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
DFS ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด unrooted tree๋ฅผ rooted tree๋ก ๋ง๋ค ์ ์๋ค. ์ด ๊ฒฝ์ฐ์๋ Tree edge์ด์ธ์ ๊ฐ์ ์ด ์กด์ฌํ์ง ์๊ฒ ๋๋ค.