DFS(Depth-First Search)의 정의와 특징
정의
DFS는 깊이 우선 탐색 알고리즘이며, 그래프의 모든 정점을 방문하는 방법 중 하나입니다. 시작 정점에서 시작하여 가능한 멀리 있는 정점까지 깊게 들어가면서 탐색합니다.
특징
- 깊이 우선 탐색: 가능한 한 깊게 탐색하고, 더 이상 탐색할 곳이 없으면 이전 정점으로 돌아가 다음 경로를 탐색합니다.
- 스택(Stack) 또는 재귀 사용: 보통 스택이나 재귀를 사용하여 구현됩니다.
- 백트래킹: 문제 해결을 위한 경로를 찾을 때 유용하며, 해가 없는 루트는 즉시 포기하고 다시 이전 단계로 돌아갑니다.
- 시간 복잡도: 일반적으로 (O(V + E))입니다. 여기서 (V)는 정점의 수, (E)는 간선의 수입니다.
장점
- 메모리 효율성: BFS에 비해 상대적으로 적은 메모리를 사용합니다.
- 백트래킹 가능: 문제 해결을 위한 경로를 찾을 때 유용하며, 해가 없는 루트는 즉시 포기하고 다시 이전 단계로 돌아갑니다.
- 간결한 코드: 재귀를 사용하면 코드가 간결해질 수 있습니다.
단점
- 최단 경로 미보장: 최단 경로를 찾을 수 없을 가능성이 있습니다.
- 스택 오버플로우 위험: 매우 깊은 그래프에 대해서는 재귀를 사용할 때 스택 오버플로우가 발생할 수 있습니다.
사용 예
- 미로 찾기: 출발점에서 도착점까지의 경로를 찾을 때
- 최적화 문제: 여러 가능한 해 중에서 최적의 해를 찾을 때
- 트리 순회: 파일 시스템, DOM(Document Object Model) 트리 등을 순회할 때
C와 Python에서의 비교
C
Python
정리
C는 성능 최적화와 메모리 관리가 가능하지만 구현이 복잡할 수 있습니다. Python은 라이브러리와 기본 제공되는 자료형을 활용하여 빠르고 쉽게 구현할 수 있습니다.