[알고리즘] 너비 우선 탐색(BFS, Breadth-First Search) 알고리즘

너비 우선 탐색(BFS, Breadth-First Search) 알고리즘에 대해 알아보자 :)

May 19, 2025

너비 우선 탐색 알고리즘이란?

📌
너비 우선 탐색(BFS, Breadth-First Search) 알고리즘
그래프나 트리의 너비를 우선으로 탐색하는 알고리즘
ex) 검색 엔진에서 페이지 간 링크 구조를 따라가며 웹을 탐색하는 데 사용하는 방식
notion image

너비 우선 탐색 알고리즘 특징

  • 최단 경로 탐색: DFS와 달리 BFS는 최단 경로 탐색에 유리 (특히, 무가중치 그래프에서는 출발점에서 특정 정점까지의 최단 경로를 보장)
  • 메모리 사용: 큐에 모든 이웃을 저장하기 때문에 메모리 사용량이 많음
  • 평행적 확장: 출발점에서 가까운 정점부터 차례대로 탐색하기 때문에 일정한 깊이에서의 노드를 한 번에 탐색 가능

너비 우선 탐색 알고리즘 실제 적용 사례

  • 최단 경로 탐색: 지하철 노선도와 같은 그래프 구조에서 두 역 간의 최단 경로를 찾는 데 사용
  • 네트워크 탐색: BFS는 네트워크나 소셜 네트워크에서 특정 사용자로부터 다른 사용자까지 도달하는 경로를 찾는 데 자주 활용
  • 웹 크롤링: BFS는 검색 엔진에서 페이지 간의 링크 구조를 따라가며 웹을 탐색하는 데 사용

너이 우선 탐색 알고리즘의 단계

순서
절차
1
탐색 시작점에서 출발하여, 인접한 모든 정점을 큐에 넣고 방문합니다.
2
방문한 정점의 인접한 정점들을 다시 큐에 넣으며 너비를 넓혀갑니다.
3
모든 정점을 탐색할 때까지 해당 과정을 반복합니다.

너비 우선 탐색 구현 (ex. python)

### 입력 ### from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: vertex = queue.popleft() print(vertex, end=' ') for neighbor in graph[vertex]: if neighbor not in visited: queue.append(neighbor) visited.add(neighbor) graph = { 'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F'], 'D': [], 'E': ['F'], 'F': [] } bfs(graph, 'A') ### 출력 ### A B C D E F