[Algorithm] : DFS, BFS
Updated:
DFS์ BFS๋ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
Graph
๊ทธ๋ํ๋ Node์ ์ด Node๋ค์ ์๋ก ์ฐ๊ฒฐํ๋ Edge๋ก ํํ๋๋ค.
๊ทธ๋ํ ํ์์ด๋ ํ๋์ ๋
ธ๋๋ฅผ ์์์ผ๋ก ๋ค์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ๋งํ๋ค.
๊ทธ๋ํ๋ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
- ์ธ์ ํ๋ ฌ(Adjacency Matrix) : 2์ฐจ์ ๋ฐฐ์ด๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
- ๋ชจ๋ ๋ ธ๋๋ค์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ค.
- ํ์ด์ฌ์์๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ค.
- ์ธ์ ๋ฆฌ์คํธ(Adjacency List) : ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
- ๊ฐ ๋ ธ๋๋ค์ ์ฐ๊ฒฐ๋ ๊ด๊ณ๋ง์ ์ ์ฅํ๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ด์ฌ์์๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ค.
DFS
Depth-First Search, ์ต๋ํ ๋ฉ๋ฆฌ ์๋ ๋ ธ๋๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ๋ค.
์ด๋ค ์์์ ๋ ธ๋์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ(branch)๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ์
๊ตฌํ ๋ฐฉ๋ฒ
- ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ค.
- ํ์ด์ฌ์์ ์คํ์ ๊ธฐ๋ณธ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ค.
- append(), pop() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค.
- โ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. โ
- ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๋ค.
๋์ ๊ณผ์
- ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
- ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๊ทธ ์ธ์ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
- 2์ ๊ณผ์ ์ ๋์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์๊ฐ ๋ณต์ก๋
(์ ์ ์ ๊ฐ์: $V$, ๊ฐ์ ๊ฐ์: $E$)
- ๊ทธ๋ํ๋ฅผ ์ธ์ ํ๋ ฌ๋ก ๊ตฌํํ๋ค๋ฉด $O(V^2)$
- ๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ค๋ฉด $O(V+E)$
์ฝ๋
def dfs(graph, v, visited):
visited[v] = True
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
BFS
Breadth-First Search, ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์ํ๋ค.
๊ตฌํ ๋ฐฉ๋ฒ
- ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ค.
- ํ์ด์ฌ์์ collections์ deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- โ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. โ
์๊ฐ ๋ณต์ก๋
- ๊ทธ๋ํ๋ฅผ ์ธ์ ํ๋ ฌ๋ก ๊ตฌํํ๋ค๋ฉด $O(V^2)$
- ๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ค๋ฉด $O(V+E)$
์ฝ๋
def bfs(graph, v, visited):
queue = deque([v])
visited[v] = True
while queue:
x = queue.popleft()
for i in graph[x]:
if not visited[i]:
queue.append(i)
visited[i] = True
DFS vs. BFS
DFS๋ณด๋ค๋ BFS๊ฐ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ๋์ํ๋ค.
๊ฒฝ๋ก์ ํน์ง์ ์ ์ฅํด์ผ ํ๋ ๋ฌธ์ ์ ๊ฒฝ์ฐ DFS๋ฅผ ์ฌ์ฉํ๋ค.
์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ๊ฒฝ์ฐ BFS๊ฐ ์ ๋ฆฌํ๋ค. BFS๋ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋จผ์ ์ฐพ์์ง๋ ๊ฒ์ด ๊ณง ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๋๋ค.
Reference
- ๋๋๋น, โ์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ๋ค with ํ์ด์ฌโ
Leave a comment