03. DFS(Depth-First Search)

2026. 3. 10. 22:22·CS/알고리즘

1. 특징 및 복잡도

  • 정의: 다음 분기(Branch)로 넘어가기 전, 현재 분기를 끝까지 탐색하는 방식.
  • 시간 복잡도: O(V+E) (인접 리스트 기준)
  • 공간 복잡도: O(H) (H는 그래프의 최대 깊이)

2. 장점과 단점

✅ 장점

  • BFS 대비 저장 공간 수요가 적음 (현재 경로의 노드만 저장).
  • 목표 노드가 깊은 곳에 있을 때 효율적임.

❌ 단점

  • 최단 경로를 보장하지 않음.
  • 해가 없는 경로에 깊게 빠져 시간을 낭비할 수 있음.

3. 구현 방식 (C++)

재귀는 직관적이고 스택은 안정적이다.

// 재귀 버전
void DFS(int cur) {
    visited[cur] = true;
    for(int nxt : adj[cur]) {
        if(visited[nxt]) continue;
        DFS(nxt);
    }
}

// 스택 버전
stack<int> s;
s.push(start);
while(!s.empty()) {
    int cur = s.top(); s.pop();
    if(visited[cur]) continue; 
    visited[cur] = true;
    for(int nxt : adj[cur]) {
        if(visited[nxt]) continue;
        s.push(nxt);
    }
}

4. 구현 시 주의사항

  • 스택 오버플로우 방지: 재귀 방식은 구현이 간단하지만, 깊이가 너무 깊어지면 시스템 스택 제한으로 인해 런타임 에러가 발생할 수 있다.
  • 메모리 사용량: 재귀는 경로상의 노드만 저장하여 메모리 효율이 좋지만, 스택 버전은 주변 인접 노드를 모두 스택에 넣으므로 상대적으로 메모리를 더 많이 소모한다.
  • 안정성: 대량의 노드를 탐색하거나 깊이가 예측 불가능한 경우 명시적인 스택 객체를 사용하는 것이 안전하다.

5. 실전 사례 및 번외

  • 사례: 백트래킹, 게임 내 시나리오 분기 시스템(엔딩 트리 탐색 등).
  • 번외: 스택 버전은 큐(BFS)와 달리 데이터를 '꺼낼 때' 방문 처리를 해야 재귀와 동일한 순서로 탐색이 진행된다.

'CS > 알고리즘' 카테고리의 다른 글

02. BFS(Breadth-First Search)  (0) 2026.03.07
01. 수학  (0) 2026.03.07
알고리즘 OT  (0) 2026.03.07
'CS/알고리즘' 카테고리의 다른 글
  • 02. BFS(Breadth-First Search)
  • 01. 수학
  • 알고리즘 OT
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어
        • C
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
        • 자료구조
        • 알고리즘
        • 네트워크
        • 컴퓨터 그래픽스
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    fluid implicit particle
    상수
    jump table
    narrow range filter screen-space fluid rendering
    Flip
    position based dynamics
    유체 시뮬레이션
    물리 기반 시뮬레이션
    GLSL
    surface turbulence
    bilateral blur
    C언어
    컴퓨터 구조
    실수
    screen space fluid rendering
    cloth simulation
    액체 시뮬레이션
    wave simulation
    정수 승격
    RAM
    collision
    그리드 기반 방법
    입자 기반 방법
    시스템 프로그래밍
    pbd
    fluid simulation
    파동 난류
    screen-space rendering
    명령어
    OpenGL
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
03. DFS(Depth-First Search)
글쓰기
상단으로

티스토리툴바