'๊ทธ๋ํ'๋?
์ค์ ์ธ๊ณ์ ๋ง์ ๋ฌธ์ ๋ค์ ๊ฐ์ฒด๋ค๊ณผ ๊ทธ๋ค์ ๊ด๊ณ๋ก ํํ๋๋ค.
๊ทธ๋์ ์ค์ ๋ก๋ ๋ง์ ๋ฌธ์ ๋ค์ด ๊ทธ๋ํ ๋ฌธ์ ๋ก ๋ณํ๋์ด์ ํ์ด์ง๋ค๊ณ ํ๋ค.
ex) ํ์ด๋ฐ๋ผ๋ฐ๋์์ ๋ด์๊น์ง ๊ฐ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋
ธ์ ์? ๊ฐ์ฅ ์ ๋ ดํ ๋
ธ์ ์?
๊ทธ๋ํ๋ '์ ์ vertex' (๋ ธ๋)๋ค๊ณผ ๊ทธ๋ค์ ์ฐ๊ฒฐํ๋ '๊ฐ์ edge'๋ค์ ์งํฉ.
- ์ฃ์ง์๋ ๋ฐฉํฅ์ด ์์ ์ ์๊ณ ์์ ์๋ ์๋ค.
- ์ฃ์ง๊ฐ ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๊ณ ์์ผ๋ฉด ๋ ๋ ธ๋๊ฐ ์ธ์ adjacentํ๋ค๊ณ ํ๋ค.
- ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ ํธ๋ฆฌ๋ผ๊ณ ํ๋ค. (์ด์ ์์ ์์ ํ์ ํธ๋ฆฌ์ ์ผ์ข ์ด๋ผ๊ณ ํ๋๋ฐ, ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ์ผ์ข ์ธ๊ฑด๊ฐ?)
- ๊ฒฝ๋ก path : ์ธ์ ํ ์ ์ ๋ค์ sequence์ด๋ค.
- simple path : ๋ฐ๋ณต๋๋ ์ ์ ์ด ์๋ ๊ฒฝ๋ก.
- ์ฌ์ดํด cycle : ์ฒซ ๋ฒ์งธ ์ ๊ณผ ๋ง์ง๋ง ์ ์ด ๊ฐ์ ๊ฒฝ๋ก. (A,B,C,A)
๊ทธ๋ํ ์ ์ฉ ์ฌ๋ก
์ ์ ํ๋ก์์ ๊ฐ ๊ตฌ์ฑ ์์๋ค์ ๊ด๊ณ๋ฅผ ํํํ ๋
์์ก ๋คํธ์ํฌ : ๊ณ ์๋๋ก ๋คํธ์ํฌ, ํญ๊ณต ๋คํธ์ํฌ
์ปดํจํฐ ๋คํธ์ํฌ
๋ฐ์ดํฐ ๋ฒ ์ด์ค : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ํํํ๋ ERD
๊ตฌํ
๊ทธ๋ํ ๋ํ ๋ค๋ฅธ ADT์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปดํจํฐ๋ก ๋ค๋ฃจ๊ธฐ ์ ์ฉํ ํํ๋ก ํํํด์ผ ํ ํ์๊ฐ ์๋ค.
์ธ์ ํ๋ ฌ
๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ ํ๋ ฌAdjacency Matrix์ด ์๋ค.
๋ง ๊ทธ๋๋ก matrix, ๋ฐฐ์ด๋ค์ ๋ฐฐ์ด์ด๋ค.
V ๊ฐ์ ๋ฐฐ์ด์ด ์๊ณ ๊ฐ ๋ฐฐ์ด์ V ๊ฐ์ ์นธ์ด ์์ด์, ๋ ๋
ธ๋ ์ฌ์ด์ ์ฐ๊ฒฐ์ด ์์ผ๋ฉด 1, ์์ผ๋ฉด 0.
๋ฐฉํฅ ๊ทธ๋ํ์ธ ๊ฒฝ์ฐ ๊ฐ ๋
ธ๋์์ ์ถ๋ฐํ๋ ์ฃ์ง๊ฐ ์์ผ๋ฉด 1, ์์ผ๋ฉด 0.
์ธ์ ๋ฆฌ์คํธ
๊ทธ๋ํ๊ฐ ์กฐ๋ฐdenseํ์ง ์๋ค๋ฉด, ์ฆ ์ฃ์ง ์๊ฐ ์ ๋ค๋ฉด ์ธ์ ๋ฆฌ์คํธ๊ฐ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ ๋
ธ๋๋ณ๋ก ์์ ๊ณผ ์ฐ๊ฒฐ๋(๋ฐฉํฅ ๊ทธ๋ํ์ ๊ฒฝ์ฐ ์์ ์์ ์ถ๋ฐํ ์ฃ์ง๋ง) ๋
ธ๋๋ค์ ๋ฆฌ์คํธ์ ๋ด๋๋ค.
๋น์ฐํ ์ธ์ ํ๋ ฌ์ฒ๋ผ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ์ง ์๋ ์ฅ์ ์ด ์๋ค.
๋จ์
์ด๋ ๊ฒ ๋ณด๋ฉด ์ธ์ ๋ฆฌ์คํธ๊ฐ ์ธ์ ํ๋ ฌ๋ณด๋ค ๋ ์ข์ ๋ฐฉ์์ ๊ตฌํ์ธ๊ฒ ๊ฐ์๋ฐ, ์ธ์ ๋ฆฌ์คํธ์ ๋จ์ ์ด ๋ฌด์์ด๊ธธ๋ ์ธ์ ํ๋ ฌ๋ ์ฌ์ฉ๋๋๊ฒ์ผ๊น?
์ธ์ ๋ฆฌ์คํธ์์ ๋ ๋
ธ๋ a,b๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด์๋์ง ํ์ธ(์ฃ์งํ์ธ) ํ๋ ค๋ฉด? ๋ฐฉํฅ ๊ทธ๋ํ์ ๊ฒฝ์ฐ a->b ์ฃ์ง๊ฐ ์๋์ง ํ์ธํ๋ ค๋ฉด?
์ธ์ ๋ฆฌ์คํธ๋ '๋ฆฌ์คํธ'๋ค์ '๋ฐฐ์ด' ์ด๋๊น, ๋ฐฐ์ด์์ a ๋
ธ๋๋ฅผ ์ฐพ๋๋ฐ๋ O(1)์ด๊ณ ๋ฆฌ์คํธ์์๋ a๊ฐ ๊ฐ์ง ์ฃ์ง์ ์ ๋งํผ ์กฐํํด์ผํ๋ O(n) ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. (ํ๋ ฌ์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ก์ผ๋ O(1)๋ณต์ก๋.)
์ด๋ค ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ์๋? ๋ชจ๋ ๋ ธ๋๋ค์ ์ํํ๋ฉด์ ๊ฑฐ๊ธฐ์ ํด๋น ๋ ธ๋์์ ์ฃ์ง๊ฐ ์๋์ง ํ์ธํด์ผํ๋ O(n^2) ์ฉ์ด๋ ์์๋๋ค.
(์ฌ๊ธฐ์ ์๊ฐ ๋ณต์ก๋์ ์๋ n์ ์ ํํ๋ ์ฐจ์๋ฅผ ์๋ฏธํ๋ค.)
๊ฐ์ ๋ฆฌ์คํธ
์ธ์ ํ๋ ฌ๊ณผ ์ธ์ ๋ฆฌ์คํธ ์ธ์๋ ๊ฐ์ ๋ฆฌ์คํธ, ์ธ์ ์งํฉ ์ด๋ผ๋ ํํ๋ ์๊ธด ํ๋ฐ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค๊ณ .
๊ฐ์ ๋ค์ ๋ฆฌ์คํธ๋ก. ๋
ธ๋๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํจ์ฌ ์ ๊ฒ ์ฐจ์งํ๊ฒ ์ง๋ง, ๋ชจ๋ ์ฐ์ฐ์์ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ๋ฐ์ ์๋ค.
๊ทธ๋ํ ํ์
ํน์ ๊ทธ๋ํ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
ํธ๋ฆฌ์ ํ์ ์๊ณ ๋ฆฌ์ฆ(DLR, LDR, LRD)์ฒ๋ผ ๊ทธ๋ํ์ ํน์ ๋
ธ๋์์ ์์ํด ์ฃ์ง๋ค์ ๋ฐ๋ผ ๊ฒ์ฌํ๋ฉฐ ํ์ํ๋ค.
๊ทธ๋ํ๋ฅผ ํ์ํ๋๋ฐ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
DFS
Depth First Search : ๊น์ด ์ฐ์ ํ์.
DFS๋ ํธ๋ฆฌ์ ์ ์ ํ์ (DLR) ๊ณผ ์ ์ฌํ๊ฒ ๋์ํ๋ค.
๋๋ถ๋ถ์ DFS ์๊ณ ๋ฆฌ์ฆ์์๋ ๋ฐฉ๋ฌธ/๋น๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ boolean์ผ๋ก ํ์ํ๋ค.(๊ฐํน ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ํ์ํ ์ ์๋ค.)
BFS
Breadth First Search : ๋๋น ์ฐ์ ํ์.