너비 우선 탐색
From CS Wiki
너비 우선 탐색(Breadth-First Search, BFS)은 그래프 탐색 알고리즘 중 하나로, 루트 노드에서 시작하여 인접한 노드를 먼저 탐색한 후 점차 멀리 있는 노드를 탐색하는 방식이다.
1 알고리즘[edit | edit source]
너비 우선 탐색은 일반적으로 큐(Queue)를 사용하여 구현된다. 기본적인 과정은 다음과 같다.
- 탐색을 시작할 노드를 큐에 삽입하고 방문 표시를 한다.
- 큐에서 노드를 꺼내 해당 노드의 인접 노드들을 확인한다.
- 방문하지 않은 인접 노드를 큐에 삽입하고 방문 표시를 한다.
- 큐가 빌 때까지 위 과정을 반복한다.
2 예제 코드[edit | edit source]
다음은 Python을 사용한 너비 우선 탐색 구현 예제이다.
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)
while queue:
node = queue.popleft()
print(node, end=' ')
for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)
# 그래프 예제
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C']
}
bfs(graph, 'A')
3 특성[edit | edit source]
- 최단 경로 보장: 무가중 그래프에서 시작 노드로부터 특정 노드까지의 최단 경로를 찾을 수 있다.
- 시간 복잡도: O(V + E) (V는 정점 개수, E는 간선 개수)
- 공간 복잡도: O(V)
4 활용[edit | edit source]
- 최단 경로 탐색 (예: GPS 네비게이션, 미로 찾기)
- 네트워크에서 데이터 탐색
- 웹 크롤링
- AI의 상태 공간 탐색 (예: 체스, 퍼즐 문제 해결)
5 같이 보기[edit | edit source]
6 참고 문헌[edit | edit source]
- Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms. MIT Press.