너비 우선 탐색과 깊이 우선 탐색의 차이: 방문 순서·자료 구조·최단 경로·메모리·용도 비교
둘 다 그래프나 트리의 정점을 간선을 따라 빠짐없이 방문하는 탐색 방법입니다. 너비 우선 탐색(BFS)은 출발점에서 간선 1개로 갈 수 있는 정점을 모두 방문한 뒤 2개로 갈 수 있는 정점으로 가는 식으로, 가까운 순서대로 퍼져 나갑니다. 깊이 우선 탐색(DFS)은 한 경로를 갈 수 있는 데까지 나아가고, 막다른 곳에 이르면 되돌아와 다른 경로로 나아갑니다. 너비 우선 탐색은 큐로, 깊이 우선 탐색은 스택이나 재귀로 구현하며, 인접 리스트로 나타낸 그래프라면 둘 다 정점 수와 간선 수의 합에 비례하는 시간으로 전체를 방문합니다. 간선에 가중치가 없는 그래프의 최단 경로를 구할 때는 너비 우선 탐색, 모든 경로를 남김없이 조사하는 처리나 사이클 검출에는 깊이 우선 탐색이 자주 쓰입니다.
| 비교 항목 | 너비 우선 탐색(BFS) | 깊이 우선 탐색(DFS) |
|---|---|---|
| 방문 순서 | 출발점에서 가까운 순서(거치는 간선 수가 적은 순서)로 층마다 퍼져 나간다 | 한 경로를 끝까지 나아가고, 막다른 곳에 이르면 되돌아와 다음 경로로 나아간다 |
| 사용하는 자료 구조 | 큐(선입선출) | 스택(후입선출) 또는 재귀 호출 |
| 최단 경로 | 간선에 가중치가 없는 그래프에서는 처음 도달했을 때의 간선 수가 출발점으로부터의 최단 거리가 된다 | 최단이 보장되지 않는다. 돌아가는 경로로 먼저 도달할 수 있다 |
| 계산량(정점 수 V, 간선 수 E) | 인접 리스트에서는 O(V + E), 인접 행렬에서는 O(V²) | 너비 우선 탐색과 마찬가지로 인접 리스트에서는 O(V + E), 인접 행렬에서는 O(V²) |
| 사용하는 메모리 | 다음에 방문할 정점을 큐에 저장해 둔다. 가지가 많으면 한 층의 정점이 한꺼번에 큐에 들어가 커진다 | 재귀로 쓰면 지금 따라가는 경로 위의 정점만 기억하면 되므로 경로의 깊이에 비례한다. 너무 깊으면 콜 스택이 넘칠 수 있다 |
| 해를 찾는지 여부 | 정점이 유한하면 반드시 찾는다. 탐색 범위가 한없이 넓어지는 경우에도 얕은 위치의 해부터 차례로 찾는다 | 유한 그래프에서 방문한 정점을 기록하면 반드시 찾는다. 한없이 깊어지는 경우에는 한 경로를 계속 나아가 돌아오지 못할 수 있다 |
| 트리 순회 순서 | 레벨 순서(루트에서 가까운 단마다 왼쪽에서 오른쪽으로) | 전위 순회, 중위 순회, 후위 순회 |
| 주요 용도 | 가중치 없는 그래프의 최단 경로, 미로의 최소 이동 횟수, 네트워크에서 몇 단계 앞까지 닿는지의 계산 | 미로나 퍼즐의 모든 경우의 탐색(백트래킹), 연결 요소나 사이클의 검출, 위상 정렬 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.