๊ทธ๋ํ(Graph)
์ ์ (Vertex)๊ณผ ๊ฐ์ (Edge)์ ์งํฉ์ด๋ค.
- ๋ฐฉํฅ์ฑ(Directed) ๊ทธ๋ํ: ๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ํฌํจ๋ ๊ทธ๋ํ์ด๋ค.
- ๋ฌด๋ฐฉํฅ์ฑ(Undirected) ๊ทธ๋ํ: ๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ์ด๋ค.
- ๊ฐ์ค์น(Weight) ๊ทธ๋ํ: ๊ฐ์ ์ ๊ฐ์ค์น ์ ๋ณด๊ฐ ํฌํจ๋ ๊ทธ๋ํ์ด๋ค.
- ๋ถ๋ถ(Sub) ๊ทธ๋ํ: ๊ทธ๋ํ์ ์ผ๋ถ ์ ์ ๋ฐ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ์ด๋ค.
1. ๊ตฌํ ๋ฐฉ๋ฒ
1) ์ธ์ ํ๋ ฌ
์ ์ (V)์ ์๋งํผ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์ธ์ ํ๋ฉด 1, ์ธ์ ํ์ง ์์ผ๋ฉด 0์ ๋ฃ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น(V^2)๊ฐ ์์ผ๋ ๋ฐ๋๊ฐ ๋์ ๊ทธ๋ํ ํํ์ ์ ํฉํ๋ค.
2) ์ธ์ ๋ฆฌ์คํธ
๊ฐ ์ ์ ๋ง๋ค ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ์ธ์ ํด ์๋ ์ ์ ๋ค์ ์ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์๋ค.
2. ๊ทธ๋ํ ํ์
1) ๊น์ด ์ฐ์ ํ์(DFS)
- ์์์ ํ ์ ์ ์ผ๋ก๋ถํฐ ์ฐ๊ฒฐ๋์ด ์๋ ํ ์ ์ ์ผ๋ก๋ง ๋์๊ฐ๊ณ ๋ ์ด์ ์ฐ๊ฒฐ๋ ์ ์ ์ด ์๋ค๋ฉด ์ด์ ๋จ๊ณ ์ ์ ์ผ๋ก ๋์๊ฐ ์ฐ๊ฒฐํ ์ ์๋ ์ ์ ์ด ์๋์ง ํ์ํ๋ค.
- ์คํ์ ์ฌ์ฉํด ๊ตฌํํ๋ค.
2) ๋๋น ์ฐ์ ํ์(BFS)
- ์์์ ํ ์ ์ ์ผ๋ก๋ถํฐ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ ์ ์ผ๋ก ๋์๊ฐ๋ค.
- ํ๋ฅผ ์ฌ์ฉํด ๊ตฌํํ๊ณ ์ต๋จ ๊ฒฝ๋ก์ ์ฌ์ฉํ๋ค.
3. ์ต์ ์ ์ฅ ํธ๋ฆฌ(Minimum Spanning Tree)
์ฌ์ดํด ์์ด ๋ชจ๋ ์ ์ ์ด ์ฐ๊ฒฐ๋ ํธ๋ฆฌ(์ ์ฅ ํธ๋ฆฌ) ์ค ๊ฐ์ ์ ๊ฐ์ค์น์ ํฉ์ด ๊ฐ์ฅ ์์ ํธ๋ฆฌ์ด๋ค.
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(Kruskal Algorithm): ์ฌ์ดํด์ ๋ง๋ค์ง ์๋ ๋ฒ์์์ ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ ์ ํ๋์ฉ ๋ํ๋ค.
- ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ(Prim Algorithm): ํ ๊ฐ์ ์ ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์ด๊ธฐ ๊ทธ๋ํ A๋ฅผ ๊ตฌ์ฑํ ํ ๊ทธ๋ํ A์ ์ธ๋ถ์ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ ๋ค ์ค ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ ์ ์ฐพ์ ๊ทธ ์ ์ ์ A์ ํฌํจํ๋ค. ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ ๋ชจ๋ ์ ์ ๋ค์ด ์ฐ๊ฒฐ๋๋ฉด ์ข ๋ฃํ๋ค.
4. ์์ ์ ๋ ฌ
๊ทธ๋ํ์ ์ , ํ ์์๊ฐ ์์ ๊ฒฝ์ฐ ์์๋ฅผ ์ ์งํ๊ณ ๊ทธ๋ํ์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ์ ๋ ฌ์ด๋ค.
5. ์ต๋จ ๊ฒฝ๋ก
๋ ์ ์ ์ฌ์ด์ ๊ฒฝ๋ก๋ค ์ค ๊ฐ์ ์ ๊ฐ์ค์น์ ํฉ์ด ์ต์์ธ ๊ฒฝ๋ก์ด๋ค.
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ: ์์ ๊ฐ์ค์น๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉฐ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น์ทํ๋ค.
- ๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ: ์์ ๊ฐ์ค์น๋ ํ์ฉํ์ง๋ง ์์ ์ฌ์ดํด์ ํ์ฉํ์ง ์๋๋ค.