CS/알고리즘
알고리즘 - DFS(깊이 우선 탐색) & BFS(너비 우선 탐색)
Hosae905
2023. 8. 8. 17:07
DFS(깊이 우선 탐색)
그래프 완전 탐색 기법 중 하나로 코딩 테스트에서 가장 많이 사용되는 알고리즘이다.
DFS(너비 우선 탐색)의 원리
- 그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘이다.
- 재귀 함수 or 스택 자료구조를 이용하여 구현한다. (후입 선출 특성을 가지고 있음)
- 시간 복잡도는 O(V + E) - V: 노드 수, E: 에지 수
- 한 번 방문한 노드는 다시 방문하면 안되며 따라서 노드 방문 여부를 체크할 배열이 필요하다.
- 위의 그래프를 사진과 같이 인접 리스트로 표현할 수 있다.
※ DFS를 구현할 경우 재귀 함수를 이용하기 때문에 스택 오버플로우에 유의해야 한다.
DFS는 어떤 한 분기를 먼저 최대 깊이까지 탐색하기 때문에 목표 노드가 여러개 일 경우 탐색에 걸리는 시간이 높아질 수 있다.
DFS 과정
1. DFS를 시작한 노드를 정한 후 사용할 자료구조(인접 리스트)를 초기화 한다.
2. 스택에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 스택에 삽입한다.
3. 스택 자료구조에 값이 없을 때까지 반복한다.
※ 스택에 노드를 삽입할 때 방문 배열을 체크하고 스택에서 노드를 뺄 때 탐색 순서에 기록하며 인접 노드를 방문 배열과 대조하여 살펴본다.
BFS(너비 우선 탐색)
BFS(너비 우선 탐색)도 마찬가지로 그래프 완전 탐색 기법 중 하나이다.
BFS의 원리
- 시작 노드에서 출발해 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘이다.
- 큐 자료구조를 이용한다. (선입 선출 특성을 가지고 있음)
- 시간 복잡도는 O(V + E) - V: 노드 수, E: 에지 수
- BFS(너비 우선 탐색)은 탐색 시작 노드와 가까운 노드를 우선하여 탐색하므로 목표 노드에 도착하는 경로가 여러 개일 때 최단 경로를 보장한다.
BFS 과정
1. BFS를 시작할 노드를 정한 후 사용할 자료구조를 초기화한다.
2. 큐에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 큐에 삽입한다.
3. 큐 자료구조에 값이 없을 때까지 반복한다.