1. BFS 알고리즘이란?
BFS(Breadth-First Search)란 너비 우선 탐색이라고 불리며 그래프에서 가까운 노드부터 탐색하는 알고리즘입니다. BFS 알고리즘은 언제 사용하면 좋을까요? BFS 알고리즘은 주로 그래프에서 모든 간선의 비용이 동일한 조건에서 최단 거리를 구하는 문제를 효과적으로 해결할 수 있는 알고리즘입니다. 그리고 "미로를 빠져나가는 최단 거리(경로)"를 구하는 문제 등에서 효과적으로 활용할 수 있는 알고리즘입니다.
2. BFS 동작 과정
BFS 알고리즘은 그래프에서 가까운 노드부터 우선적으로 탐색한다는 점에서, 선입선출 방식의 큐(Queue) 자료구조를 활용합니다. 즉, BFS는 인접한 노드를 반복적으로 큐에 삽입하고 먼저 삽입된 노드부터 차례로 큐에서 꺼내도록 알고리즘을 작성하면 됩니다. BFS 알고리즘의 구체적인 동작 과정은 아래와 같습니다
1. 탐색 시작 노드 정보를 큐에 삽입하고 *방문 처리합니다.
2. 큐에서 노드를 꺼내 방문하지 않은 인접 노드 정보를 모두 큐에 삽입하고 방문 처리합니다.
3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복합니다.
여기서 *방문 처리란 탐색한 노드를 재방문하지 않도록 구분하는 것입니다. 즉, 큐에 한 번이라도 삽입된 노드를 다시 삽입하지 않도록 체크하는 것이죠.
이제 아래 그림 1 과 같은 그래프 예시를 통해 BFS 동작 과정을 알아보겠습니다. 노드 1을 시작 노드로 설정하겠습니다. 일반적으로 인접한 노드가 2개 이상인 경우에는 해당 노드들 중 번호가 낮은 노드부터 처리합니다.
그림 1. BFS 동작 설명을 위한 그래프 예시
편의상 현재 큐에서 꺼내 처리 중인 노드는 파란색으로, 방문 처리한 노드는 회색으로 표시하겠습니다.
(1) 시작 노드인 노드 1을 큐에 삽입하고 방문 처리합니다.
(2) 큐에서 노드 1을 꺼내고 노드 1과 인접한 노드 2, 3을 큐에 삽입하고 방문 처리합니다.
(3) 큐에서 노드 2를 꺼내고 노드 2와 인접한 노드 8을 큐에 삽입하고 방문 처리합니다.
(4) 큐에서 노드 3을 꺼내고 노드 3과 인접한 노드 4, 5를 큐에 삽입하고 방문 처리합니다.
(5) 큐에서 노드 8을 꺼내고 노드 8과 인접한 노드 6, 7을 큐에 삽입하고 방문 처리합니다.
(6) 그래프 내 노드에서 방문하지 않은 노드가 없으므로 큐에서 모든 노드를 차례대로 꺼냅니다.
결과적으로 노드의 탐색 순서, 즉 큐에 삽입한 순서는 다음과 같습니다.
1 -> 2 -> 3 -> 8 -> 4 -> 5 -> 6 -> 7
'알고리즘' 카테고리의 다른 글
인접 행렬, 인접리스트 (0) | 2022.05.13 |
---|---|
DFS 연습 , 2021 카카오 채용연계형 인턴십거리두기 확인하기 (0) | 2022.04.18 |
깊이 우선 탐색(DFS)란 ? (0) | 2022.04.10 |
HashMap (0) | 2022.04.03 |
TreeSet (0) | 2022.04.02 |