๊ทธ๋ํ๋?
ํธ๋ฆฌ์ฒ๋ผ ๋ ธ๋(๋ฐ์ดํฐ)๋ค์ด ์ฐ๊ฒฐ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ ธ๋๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ ๋ ์ฃผ๋ก ์ฐ์ธ๋ค. ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ๋ ธ๋๋ค์ ๋ถ๋ชจ/์์ ๊ด๊ณ๊ฐ ์์ด ์ ๋ถ ์ด์ด์ง ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ธ๋์ ๋ ธ๋ ์ฌ์ด๋ฅผ ์๋ ์ ์ ๊ฐ์ ์ด๋ผ๊ณ ํ๋ค.
์ด ๊ฐ์ ์ ๋ฐฉํฅ์ ๋ํ๋ผ ์๋ ์๋ค. ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ๋ฅผ Directed Graph ๋ผ๊ณ ํ๊ณ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ๋ฅผ Undirected Graph ๋ผ๊ณ ํ๋ค. ๋ฐฉํฅ ๊ทธ๋ํ๋ ๋จ๋ฐฉํฅ ํน์ ์๋ฐฉํฅ์ผ๋ก๋ ํํ๋๋ค. ์ฐธ๊ณ ๋ก ํธ๋ฆฌ๋ ์, ์๋๋ก ํ๋ฅด๋ฏ๋ก ๋ฐฉํฅ ๊ทธ๋ํ์ธ๋ฐ ๋ฐฉํฅ์ ์๋ตํ ๊ฒ์ด๋ค.
์ด์ด์ง๋ ๋
ธ๋๋ค์ ๋ฐ๋ผ๊ฐ๋ค๋ณด๋ฉด ์ฒ์ ์์ํ ๋
ธ๋๋ก ๋์์ค๋ ๊ทธ๋ํ๋ ์๋ค. ์ด๊ฒ์ ์ฌ์ดํด์ด๋ผ๊ณ ํ๋๋ฐ, ์ฌ์ดํด์ด ํ๋๋ผ๋ ์๋ ๊ทธ๋ํ๋ฅผ Cyclic Graph, ์ฌ์ดํด์ด ํ๋๋ ์๋ ๊ทธ๋ํ๋ฅผ Acyclic Graph ๋ผ๊ณ ํ๋ค.
์ฐธ๊ณ ๋ก ํธ๋ฆฌ๋ ๋งจ ์ ๋ฃจํธ๋ผ๋ ์ถ๋ฐ์ ์ด ์๊ณ ์ฌ์ดํด์ด ์๊ณ ์, ์๋๋ก๋ง ํ๋ฅด๋ ๊ณ์ธต ํํ์ ๋ฐฉํฅ ๊ทธ๋ํ๋ค!
๊ทธ๋ํ ํํ ๋ฐฉ๋ฒ
Adjacency Matrix
๊ทธ๋ํ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ ํํํ๋ค. ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด 1 ์๋๋ผ๋ฉด 0์ ๊ฐ์ผ๋ก ํํํ๋ค.
Adjacency List
๊ทธ๋ํ๋ฅผ Linked List ๋ก ํํํ๋ค. ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์์ ์๊ด ์์ด ์ฐ๊ฒฐํ๋ค. ๊ทธ๋ฐ๋ฐ a ๋ ธ๋๊ฐ b ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋๊ฒ์ ํํํ ๋, a->b, b->a ์ด ๋๋ฒ์ผ๋ก ํํํด์ผํด์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๊ฐ์ ์ ๊ฐ์ m๊ฐ๋ณด๋ค 2๋ฐฐ ๋ ๋ง์ 2m๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ๊ฒ ๋๋ค.
Graph ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
DFS(Depth-First Search)
์ด์งํ์ํธ๋ฆฌ์์์ inorder, preorder, postorder ํ์์ด ๋ฐ๋ก ๊น์ด ์ฐ์ ํ์ ๋ฐฉ๋ฒ์ด๋ค. ๋ฃจํธ ๋ ธ๋์ child ๋ ธ๋, ๊ทธ ๋ ธ๋์ child ๋ ธ๋... ์ ์ ์๋๋ก ํ์ํ๋ ๋ฐฉ์์ด๋ค.
BFS(Breadth-First Search)
๋์ด ์ฐ์ ํ์์ ๋ฃจํธ ๋ ธ๋์ ๊ฐ์ ๋ ๋ฒจ ์์ ์๋ ๋ชจ๋ child ๋ ธ๋๋ฅผ ๋ค ๋ฐฉ๋ฌธ ํ๊ณ ๊ทธ ๋ค์ ๋ ๋ฒจ์ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
์ ์ฅ ํธ๋ฆฌ(Spanning Tree)
Spanning Tree๋ ์ฐ๊ฒฐ ๊ทธ๋ํ(์ค๊ฐ์ ๋๊ฒจ์์ง ์์ ๊ทธ๋ํ) ์ ๋ถ๋ถ ๊ทธ๋ํ๋ค์ด๋ค. ๋ชจ๋ ๋ ธ๋๋ค์ด ํฌํจ๋๊ณ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์์์ผ ํ๋ค.
์ต์๋น์ฉ ์ ์ฅํธ๋ฆฌ(MST, Minimum Cost Spanning Tree)
๊ฐ์ ๋ค์ ๊ฐ์ค์น๋ฅผ ํฉํ ๊ฐ์ด ์ต์๊ฐ ๋๋ ์ ์ฅ ํธ๋ฆฌ๋ค. ์ฆ, ์ต์ ๋น์ฉ์ผ๋ก ๋ง๋ค ์ ์๋ ์ ์ฅ ํธ๋ฆฌ. ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ผ ๋ ๊ตฌํ ์ ์๋ค. ์ฐ๊ฒฐ ๊ทธ๋ํ์์ ์ต์๋น์ฉ ์ ์ฅํธ๋ฆฌ๋ฅผ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ ์ค์๋ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(Kruskal Algorithm)์ด ๋ํ์ ์ด๋ค.
๊ทธ๋ํ๋?
ํธ๋ฆฌ์ฒ๋ผ ๋ ธ๋(๋ฐ์ดํฐ)๋ค์ด ์ฐ๊ฒฐ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ ธ๋๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ ๋ ์ฃผ๋ก ์ฐ์ธ๋ค. ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ๋ ธ๋๋ค์ ๋ถ๋ชจ/์์ ๊ด๊ณ๊ฐ ์์ด ์ ๋ถ ์ด์ด์ง ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ธ๋์ ๋ ธ๋ ์ฌ์ด๋ฅผ ์๋ ์ ์ ๊ฐ์ ์ด๋ผ๊ณ ํ๋ค.
์ด ๊ฐ์ ์ ๋ฐฉํฅ์ ๋ํ๋ผ ์๋ ์๋ค. ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ๋ฅผ Directed Graph ๋ผ๊ณ ํ๊ณ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ๋ฅผ Undirected Graph ๋ผ๊ณ ํ๋ค. ๋ฐฉํฅ ๊ทธ๋ํ๋ ๋จ๋ฐฉํฅ ํน์ ์๋ฐฉํฅ์ผ๋ก๋ ํํ๋๋ค. ์ฐธ๊ณ ๋ก ํธ๋ฆฌ๋ ์, ์๋๋ก ํ๋ฅด๋ฏ๋ก ๋ฐฉํฅ ๊ทธ๋ํ์ธ๋ฐ ๋ฐฉํฅ์ ์๋ตํ ๊ฒ์ด๋ค.
์ด์ด์ง๋ ๋
ธ๋๋ค์ ๋ฐ๋ผ๊ฐ๋ค๋ณด๋ฉด ์ฒ์ ์์ํ ๋
ธ๋๋ก ๋์์ค๋ ๊ทธ๋ํ๋ ์๋ค. ์ด๊ฒ์ ์ฌ์ดํด์ด๋ผ๊ณ ํ๋๋ฐ, ์ฌ์ดํด์ด ํ๋๋ผ๋ ์๋ ๊ทธ๋ํ๋ฅผ Cyclic Graph, ์ฌ์ดํด์ด ํ๋๋ ์๋ ๊ทธ๋ํ๋ฅผ Acyclic Graph ๋ผ๊ณ ํ๋ค.
์ฐธ๊ณ ๋ก ํธ๋ฆฌ๋ ๋งจ ์ ๋ฃจํธ๋ผ๋ ์ถ๋ฐ์ ์ด ์๊ณ ์ฌ์ดํด์ด ์๊ณ ์, ์๋๋ก๋ง ํ๋ฅด๋ ๊ณ์ธต ํํ์ ๋ฐฉํฅ ๊ทธ๋ํ๋ค!
๊ทธ๋ํ ํํ ๋ฐฉ๋ฒ
Adjacency Matrix
๊ทธ๋ํ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ ํํํ๋ค. ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด 1 ์๋๋ผ๋ฉด 0์ ๊ฐ์ผ๋ก ํํํ๋ค.
Adjacency List
๊ทธ๋ํ๋ฅผ Linked List ๋ก ํํํ๋ค. ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์์ ์๊ด ์์ด ์ฐ๊ฒฐํ๋ค. ๊ทธ๋ฐ๋ฐ a ๋ ธ๋๊ฐ b ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋๊ฒ์ ํํํ ๋, a->b, b->a ์ด ๋๋ฒ์ผ๋ก ํํํด์ผํด์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๊ฐ์ ์ ๊ฐ์ m๊ฐ๋ณด๋ค 2๋ฐฐ ๋ ๋ง์ 2m๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ๊ฒ ๋๋ค.
Graph ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
DFS(Depth-First Search)
์ด์งํ์ํธ๋ฆฌ์์์ inorder, preorder, postorder ํ์์ด ๋ฐ๋ก ๊น์ด ์ฐ์ ํ์ ๋ฐฉ๋ฒ์ด๋ค. ๋ฃจํธ ๋ ธ๋์ child ๋ ธ๋, ๊ทธ ๋ ธ๋์ child ๋ ธ๋... ์ ์ ์๋๋ก ํ์ํ๋ ๋ฐฉ์์ด๋ค.
BFS(Breadth-First Search)
๋์ด ์ฐ์ ํ์์ ๋ฃจํธ ๋ ธ๋์ ๊ฐ์ ๋ ๋ฒจ ์์ ์๋ ๋ชจ๋ child ๋ ธ๋๋ฅผ ๋ค ๋ฐฉ๋ฌธ ํ๊ณ ๊ทธ ๋ค์ ๋ ๋ฒจ์ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
์ ์ฅ ํธ๋ฆฌ(Spanning Tree)
Spanning Tree๋ ์ฐ๊ฒฐ ๊ทธ๋ํ(์ค๊ฐ์ ๋๊ฒจ์์ง ์์ ๊ทธ๋ํ) ์ ๋ถ๋ถ ๊ทธ๋ํ๋ค์ด๋ค. ๋ชจ๋ ๋ ธ๋๋ค์ด ํฌํจ๋๊ณ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์์์ผ ํ๋ค.
์ต์๋น์ฉ ์ ์ฅํธ๋ฆฌ(MST, Minimum Cost Spanning Tree)
๊ฐ์ ๋ค์ ๊ฐ์ค์น๋ฅผ ํฉํ ๊ฐ์ด ์ต์๊ฐ ๋๋ ์ ์ฅ ํธ๋ฆฌ๋ค. ์ฆ, ์ต์ ๋น์ฉ์ผ๋ก ๋ง๋ค ์ ์๋ ์ ์ฅ ํธ๋ฆฌ. ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ผ ๋ ๊ตฌํ ์ ์๋ค. ์ฐ๊ฒฐ ๊ทธ๋ํ์์ ์ต์๋น์ฉ ์ ์ฅํธ๋ฆฌ๋ฅผ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ ์ค์๋ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(Kruskal Algorithm)์ด ๋ํ์ ์ด๋ค.