BFS 알고리즘은 너비 우선 탐색이라는 의미를 갖고 있다. 말 그대로 가장 가까운 노드부터 탐색해가면서 탐색 범위를 넓혀 나가는 개념이다. DFS는 가장 깊은 노드까지 탐색하고 되돌아가서 다른 경로를 택하는 방법을 취한 것과는 반대로 동작한다는 뜻이다.
BFS는 큐를 사용해서 선입선출 (FIFO) 의 방식을 사용한다. 인접 노드를 큐에 삽입하고 먼저 들어온 노드가 먼저 큐에서 나가게 되면서 인접한 노드부터 차례대로 탐색을 할 수 있는 것이다. BFS의 동작과정은 다음과 같다.
BFS 동작과정
1. 탐색을 시작하는 노드를 큐에 삽입하고 방문 처리 한다.
2. 큐에서 가장 앞에 있는 노드를 꺼내서 그 노드의 인접 노드 중 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리 한다.
3. 과정2를 더 이상 반복할 수 없을 때까지 반복한다.
이 그래프를 BFS 알고리즘으로 탐색(순회) 한다고 가정해보자. 먼저 탐색 시작 노드를 V0로 설정했을 때, 탐색 순서는 다음과 같다.
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
또한 큐에 노드가 삽입되고 꺼내지는 과정은 아래와 같다.
큐를 사용해서 BFS 알고리즘을 구현해야 한다. 이 때 앞선 게시물(https://blogan99.tistory.com/20)을 참고하면 collections 모듈의 deque 라이브러리를 사용하여 큐를 구현하는 것이 이상적임을 알 수 있다.
이 때 BFS 방식의 탐색을 수행함에 있어서 모든 노드를 큐에 삽입하므로 시간복잡도는 O(N) 임을 알 수 있다.
일반적인 경우 실제 수행 시간은 DFS보다 BFS 알고리즘이 더 짧다는 점만 기억해두자.
아래는 큐를 활용하여 BFS 알고리즘을 구현한 소스코드이다.
'Algorithm' 카테고리의 다른 글
BFS (2) - 실전문제 5.4) 미로 탈출 (0) | 2023.08.01 |
---|---|
DFS (2) - 실전문제 5.3) 음료수 얼려 먹기 (0) | 2023.08.01 |
DFS (1) - DFS (Depth-First Search) 란? (0) | 2023.07.30 |
자료구조 (Data Structure) (6) - 그래프 표현 방식 : 인접 리스트 (Adjacency List) (0) | 2023.07.30 |
자료구조 (Data Structure) (5) - 그래프 표현 방식 : 인접 행렬 (Adjacency Matrix) (0) | 2023.07.30 |