너비 우선 탐색

IT 위키
AlanTuring (토론 | 기여)님의 2025년 3월 13일 (목) 03:11 판 (새 문서: 너비 우선 탐색(Breadth-First Search, BFS)은 그래프 탐색 알고리즘 중 하나로, 루트 노드에서 시작하여 인접한 노드를 먼저 탐색한 후 점차 멀리 있는 노드를 탐색하는 방식이다. 섬네일|BFS와 DFS ==알고리즘== 너비 우선 탐색은 일반적으로 큐(Queue)를 사용하여 구현된다. 기본적인 과정은 다음과 같다. #탐색을 시작할 노드를 큐에 삽입하고 방문 표...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

너비 우선 탐색(Breadth-First Search, BFS)은 그래프 탐색 알고리즘 중 하나로, 루트 노드에서 시작하여 인접한 노드를 먼저 탐색한 후 점차 멀리 있는 노드를 탐색하는 방식이다.

BFS와 DFS

1 알고리즘[편집 | 원본 편집]

너비 우선 탐색은 일반적으로 큐(Queue)를 사용하여 구현된다. 기본적인 과정은 다음과 같다.

  1. 탐색을 시작할 노드를 큐에 삽입하고 방문 표시를 한다.
  2. 큐에서 노드를 꺼내 해당 노드의 인접 노드들을 확인한다.
  3. 방문하지 않은 인접 노드를 큐에 삽입하고 방문 표시를 한다.
  4. 큐가 빌 때까지 위 과정을 반복한다.

2 예제 코드[편집 | 원본 편집]

다음은 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 특성[편집 | 원본 편집]

  • 최단 경로 보장: 무가중 그래프에서 시작 노드로부터 특정 노드까지의 최단 경로를 찾을 수 있다.
  • 시간 복잡도: O(V + E) (V는 정점 개수, E는 간선 개수)
  • 공간 복잡도: O(V)

4 활용[편집 | 원본 편집]

  • 최단 경로 탐색 (예: GPS 네비게이션, 미로 찾기)
  • 네트워크에서 데이터 탐색
  • 웹 크롤링
  • AI의 상태 공간 탐색 (예: 체스, 퍼즐 문제 해결)

5 같이 보기[편집 | 원본 편집]

6 참고 문헌[편집 | 원본 편집]

  • Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms. MIT Press.