BFS(๋๋น ์ฐ์ ํ์)
๋๋น ์ฐ์ ํ์์ ๋ฃจํธ ๋ ธ๋ (ํน์ ์์์ ๋ ธ๋)์์ ์์ํด์ ์ธ์ ํ ๋ ธ๋๋ค์ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ์ฌ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๊ฐ๋ฅํ ํ ๋๊ฒ ํ์์ ์งํํ๋ ๋ฐฉ์์ด๋ค.
BFS์ ๋์ ๋ฐฉ์
- ์์ ๋
ธ๋ ์ ํ
- ํ์ํ ๋ ธ๋๋ฅผ ์ ํํ๊ณ ํด๋น ๋ ธ๋๋ฅผ ํ์ ์ถ๊ฐ
- ๋ฐฉ๋ฌธ ๋ฐ ํ ์ฐ์ฐ
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- ํ์ฌ ๋ฐฉ๋ฌธ์ค์ธ ๋ ธ๋์ ์ธ์ ๋ ธ๋๋ค์ ํ์ธํ์ฌ ๋ฐฉ๋ฌธ๋์ง ์์๋ค๋ฉด ํ์ ์ถ๊ฐ
- ๋ฐ๋ณต
- ํ๊ฐ ๋น์ด ์์ง ์๋ ๋์ ์ ๊ณผ์ ์ ๋ฐ๋ณต์ํ
- ํ๊ฐ ๋น์๋ค๋ฉด ํ์์ด ์๋ฃ๋จ์ ์๋ฏธ
- ํ์ ์ข
๋ฃ
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ธ๋๋ฅผ ์ฐพ์ผ๋ฉด ํ์์ด ์ข ๋ฃ๋จ.
BFS๋ Queue ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
BFS ๊ตฌํ ์์
์ธ์ ๋ฆฌ์คํธ๋ก ํํ๋ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ํ์
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
Python์ collection ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ deque๋ฅผ ์ฌ์ฉํ์ฌ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์
from collections import deque
def bfs(graph, start):
# ๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ ๊ธฐ๋กํ ์งํฉ
visited = set()
# ํ๋ฅผ ์ด๊ธฐํ (start ์ฝ์
)
queue = deque([start])
# ํ๊ฐ ๋น์ด์์ง ์์ ๋์ ๋ฐ๋ณต
while queue:
# ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ (ํ๋ ์ ์
์ ์ถ ์๋ฃ๊ตฌ์กฐ)
node = queue.popleft()
# ํด๋น ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ๋์ ์๋ค๋ฉด
if node not in visited:
# ํด๋น ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
print(node, end = " ")
visited.add(node)
# ํ์ฌ ๋ฐฉ๋ฌธ์ค์ธ ๋
ธ๋์ ์ธ์ ๋
ธ๋๋ค์ ๋ํด
for neighbor in graph[node]:
# ๋ฐฉ๋ฌธ๋์ ์๋ ๋
ธ๋๋ผ๋ฉด ํ์ ์ถ๊ฐ
if neighbor not in visited:
queue.append(neighbor)
bfs(graph, 'A')
- ํน์ง
- ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ๋ค.
- BFS๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ๋ ๋ฒจ ์์๋ก ํ์ํ๋ค.
- ๋ ๋ฒจ 0 : ์์ ๋ ธ๋
- ๋ ๋ฒจ 1 : ์์ ๋ ธ๋์ ์ธ์ ๋ ธ๋
- ๋ ๋ฒจ 2 : ๋ ๋ฒจ 1 ๋ ธ๋์ ์ธ์ ๋ ธ๋ .....
- ์์๋ก ํ์์ด ๋๊ธฐ ๋๋ฌธ์ ๋ ธ๋๊ฐ ํ์๋ ๋๋ง๋ค ๊ทธ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค.
- BFS๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ๋ ๋ฒจ ์์๋ก ํ์ํ๋ค.
- ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ๋ค.
BFS์ ์๊ฐ๋ณต์ก๋
BFS์ ์๊ฐ ๋ณต์ก๋๋ ๊ทธ๋ํ์ ๋ ธ๋ ์ (V), ๊ฐ์ ์ ์ (E)์ ๋น๋กํ๋ค.
๊ฐ ๋ ธ๋์ ๊ฐ์ ๋ค์ ํ๋ฒ์ฉ๋ง ๋ฐฉ๋ฌธ๋๊ธฐ ๋๋ฌธ์ ์ต์ข ์ ์ธ BFS์ ์๊ฐ๋ณต์ก๋๋ O(V+E) ์ด๋ค.
2024.08.20 - [๐ค์๊ณ ๋ฆฌ์ฆ] - [์๊ณ ๋ฆฌ์ฆ] DFS (๊น์ด ์ฐ์ ํ์)
[์๊ณ ๋ฆฌ์ฆ] DFS (๊น์ด ์ฐ์ ํ์)
DFS ( ๊น์ด ์ฐ์ ํ์ ) ๊น์ด ์ฐ์ ํ์์ ๋ฃจํธ ๋ ธ๋(ํน์ ์์์ ๋ ธ๋)์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ์ ๋ํ ํ์์ ์์ ํ ๋๋ด๊ณ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๋ ๋ฐฉ์์ ํ์์ ์
yobi-devlog.tistory.com
'๐ค์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ (Prim's Algorithm) (0) | 2024.08.30 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (Kruskal Algorithm) (0) | 2024.08.29 |
[์๊ณ ๋ฆฌ์ฆ] DFS (๊น์ด ์ฐ์ ํ์) (0) | 2024.08.20 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑํธ๋ํน (Backtracking) (0) | 2024.08.20 |
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm) (0) | 2024.08.18 |