๐ Graph
๊ทธ๋ํ๋ ๋ํ์ ์ธ ๋น์ ํ ์๋ฃ ๊ตฌ์กฐ๋ก, ์ ์ (vertex)๊ณผ ๊ฐ์ (edge)์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
ํธ๋ฆฌ ์ญ์ ์ ํ๋ ์ ํ์ ๊ทธ๋ํ์ด๋ค. ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ง๋ง ๊ทธ๋ํ์ ๋ฌ๋ฆฌ ์ฌ์ดํด์ด ์์ด์ผ ํ๋ค๋ ํน์ง์ด ์๋ค.
๋ชจ๋ ํธ๋ฆฌ๋ ํญ์ ๊ทธ๋ํ๊ฐ ๋์ง๋ง ๋ชจ๋ ๊ทธ๋ํ๊ฐ ํธ๋ฆฌ์ธ ๊ฒ์ ์๋๋ค! Linked List์ Heap ์ญ์ ๊ทธ๋ํ์ ํน๋ณํ ๊ฒฝ์ฐ์ด๋ค.
๐คทโ๏ธ Undirected Graph vs Directed Graph
Undirected Graph์ ๊ฐ์ ์ด ๋ฐฉํฅ์ ๊ฐ์ง ์๋ ๊ทธ๋ํ์ด๊ณ , Directed Graph์ ๊ฐ์ ์ด ๋ฐฉํฅ์ฑ์ ๊ฐ์ง๋ ๊ทธ๋ํ์ด๋ค.
๐ ๊ทธ๋ํ์ ํํ
๊ทธ๋ํ๋ฅผ ํํํ๋ ๋ฐฉ์์ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
1. Adjacency Matrix(์ธ์ ํ๋ ฌ)
2. Adjacency List(์ธ์ ๋ฆฌ์คํธ)
1. Adjacency Matrix(์ธ์ ํ๋ ฌ)
์ธ์ ํ๋ ฌ์ ๊ทธ๋ํ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ๊ทธ๋ ๊ธฐ์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ์ ์์ด ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ $O(1)$์ ํ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ์ง๋ง ๊ฐ์ ์ ๊ฐ์์๋ ์๊ด์์ด $O(V^2)$์ ๊ณต๊ฐ์ด ํ์ํ๋ค๋ ๋จ์ ์ด ์๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์ ๊ฐ์๊ฐ ๊ฑฐ์ ์ต๋ ๊ฐ์ ์ ๊ฐ์์ ๊ฐ๊น์ ๋ชจ๋ ํ๋ ฌ์ด 1๋ก ์ฑ์์ ธ์ผ ํ๋ ๊ทธ๋ํ๋ฅผ ํํํ ๋ ์ ํฉํ๋ค.(์ฌ์ฉ๋์ง ์๋ ๊ณต๊ฐ์ด ์ค์ด๋๋๊น)
2. Adjacency List(์ธ์ ๋ฆฌ์คํธ)
์ธ์ ๋ฆฌ์คํธ๋ ๊ทธ๋ํ์ ๊ฐ ์ ์ ์ ์ธ์ ํ ์ ์ ๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋๋ก ๊ด๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊ทธ๋ํ๋ ์ ์ ์ ๊ฐ์ ๋งํผ์ ์ธ์ ๋ฆฌ์คํธ๋ก ํํ๋๋ค.
๊ฐ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์๋ ๊ทธ ์ ์ ์ ์ฐจ์์ ๊ฐ์๋ฐ, ์ฐจ์(degree)๋ ์ ์ ์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ์ ์ ์๋ฅผ ๋งํ๋ค.
Directed Graph์์๋ ๋ฐฉํฅ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ ์ข ๋ฅ๋ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๊ฐ์ง๋ก ๋๋๋๋ฐ, ๊ฐ ์ ์ ์ผ๋ก๋ถํฐ ๋๊ฐ๋ ๊ฐ์ ์ ๊ฐ์๋ฅผ outdegree, ๋ค์ด์ค๋ ๊ฐ์ ์ ๊ฐ์๋ฅผ indegree๋ผ๊ณ ํ๋ค.
์ธ์ ํ๋ ฌ์ ๋นํด์๋ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํ์ ํ๋๋ฐ ์ข ๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์์ง๋ง, ๋ฐ๋๋ก ํ์ํ ๊ณต๊ฐ๋ง ๊ทธ๋๊ทธ๋ ์ถ๊ฐํด์ฃผ๋ฉด ๋๊ธฐ์ ์ฐจ์งํ๋ ๊ณต๊ฐ์ $O(V + E)$์ด๋ค.
โก๏ธ ํ๋์ ๋น๊ตํ๋ Adjacency Matrix vs Adjacency List
Action | Adjacency Matrix | Adjacency List |
๊ฐ์ ์ถ๊ฐ | $O(1)$ | $O(1)$ |
๊ฐ์ ์ ๊ฑฐ | $O(1)$ | $O(N)$ |
์ด๊ธฐํ | $O(N^2)$ | $O(N)$ |
๐ ๊ทธ๋ํ ํ์
๊ทธ๋ํ์ ํ์ ๋ฐฉ๋ฒ๋ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
1. DFS(Depth First Search, ๊น์ด ์ฐ์ ํ์)
2. BFS(Breath First Search, ๋๋น ์ฐ์ ํ์)
1. DFS(Depth First Search, ๊น์ด ์ฐ์ ํ์)
๊น์ด ์ฐ์ ํ์์ ์์ ๋
ธ๋์์ ์ถ๋ฐํ์ฌ ์๋ก์ด ๋
ธ๋๋ฅผ ๋ง๋ ๋๋ง๋ค ํด๋น ๋
ธ๋๋ฅผ ์์ ๋
ธ๋๋ก ์ค์ ํ๊ณ ๋ ์๋ก์ด ๋
ธ๋๋ฅผ ์ฐพ์๋๊ฐ๋ ๊ณผ์ ์ด๋ค.
์ฆ, ๊น์ด ์ฐ์ ํ์์ ํ ๊ธธ์ ๊น์ด ํ๊ณ ๋๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์ด๋ ๊ฒ ์ญ์ญ ํ๊ณ ๋ค๋ค๊ฐ ๋ ์ด์ ๋์๊ฐ ๊ณณ์ด ์์ผ๋ฉด ์ด์ ๋
ธ๋๋ก ๋๋์์จ ํ ๊ฐ์ง ์์ ๊ณณ ์ค์ ๋ ๊ฐ ์ ์๋ ๊ณณ์ด ์๋์ง ํ์ธํ๊ณ ๋์๊ฐ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์คํ์ ์ฌ์ฉํด์ ๊ตฌํํ ์๋ ์๊ณ , ์๋์ฒ๋ผ ์ฌ๊ท๋ก ๊ตฌํํ ์๋ ์๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ํด๋ ๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ํํํ๋ค๋ฉด ์๊ฐ ๋ณต์ก๋๋ $O(V + E)$์ด๋ค.
DFS(v)
{
์ ์ (v) ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
for(์ ์ (v)์ ์ธ์ ํ ๋ชจ๋ ๋ฏธ๋ฐฉ๋ฌธ ์ ์ (u)) {
DFS(u) // u๋ฅผ ์ถ๋ฐ์ง๋ก ์ค์ ํด์ ๋ค์ ๊ธธ ์ฐพ๊ธฐ
}
}
2. BFS(Breath First Search, ๋๋น ์ฐ์ ํ์)
๋๋น ์ฐ์ ํ์์ ๊ทธ๋ํ ์์ ์์์ ํ์ ์์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํธ๋ฆฌ์ ๋ ๋ฒจ ์์ ํ์๊ณผ ์ ์ฌํ๋ค.
๋ฐ์ด๋ฌ์ค๊ฐ ์ฃผ๋ณ์ผ๋ก ๋์์ ํผ์ ธ๋๊ฐ๋ ๊ฒ์ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค.
BFS๋ DFS์ ๋ฐ๋๋ก ํ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ค. ํ๋์ ๋ ๋ฒจ์ ๋ค ํ์ํ ๋ค์์ ๋ค์ ๋ ๋ฒจ๋ก ๋ด๋ ค๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋์ผ ๋ ๋ฒจ์ ๋ ธ๋๋ฅผ ์ ๋ถ ํ์ ๋ด๊ณ ํ์ํ๋ ๊ฒ์ด๋ค.
BFS ์ญ์ ์ธ์ ๋ฆฌ์คํธ๋ก ํํํ ๊ทธ๋ํ์์ $O(V + E)$์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
DFS๋ ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ์์ ๋ ํ๋์ ๊ฒฝ๋ก๋ง ์ ํํด์ ๋๊น์ง ๊ฐ ๋ค์ ๋์์์ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ๋ ๊ฐ๋ณด๋ ๋๋์ด๋ผ๋ฉด,
BFS๋ ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ์์ ๋ ์ด ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ์ ํํด์ ๋์์ ์ดํด๋ณธ๋ค. ๊ทธ๋์ BFS๋ก ์ฐพ์ ๊ฒฝ๋ก๋ ๋ฌด์กฐ๊ฑด ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋๋ค.
๐ References
JaeYeopHan/Interview_Question_for_Beginner
๐ ์๋ฃ๊ตฌ์กฐ ๊ฐ๋ ๋ฐ ๊ตฌํ
'CS > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ต์ ์ ์ฅ ํธ๋ฆฌ(Minimum Spanning Tree, MST) (0) | 2022.10.08 |
---|---|
Hash Table (0) | 2022.09.30 |
Red-Black Tree(RBT) (0) | 2022.09.30 |
Heap(Max Heap, Min Heap) (0) | 2022.09.29 |
Tree(Binary Tree, ํฌํ ์ด์ง ํธ๋ฆฌ, ์์ ์ด์ง ํธ๋ฆฌ, BST) (0) | 2022.09.25 |