깊이 우선 탐색


깊이 우선 탐색

  • DFS (Depth-First Search)
  • 깊이 우선 탐색 시 끝없이 깊어지는 것을 방지하기 위해 깊이 제한 적용 (조건을 이용)
  • 목표 노드에 도달하지 못하면 부모노드로 되돌아감 (부모노드로 되돌아가는 것을 백트래킹(backtracking)이라고 함)
  • 하나의 정점에서 아래쪽으로 깊게 탐색 후 더이상 탐색이 불가능하면 되돌아가 인접한 다른 노드를 탐색
  • 시간 복잡도 : O(V + E)
    V : 정점의 개수 (위 사진에서 A, B, C, D, E, F, G)
    E : 간선의 개수 (각 정점을 잇는 선)
  • 공간 복잡도 : O(V)
    방문 여부를 확인하기 위한 visited 배열 추가 필요

  • 방문 여부를 확인하기 위한 visited 배열 필요성
    방문 여부를 체크하지 않으면 두 번 탐색할 수 있음. (ex. D에서 부모노드로 돌아갔을 때 또 비교할 수 있음)
    싸이클(무한루프) 방지를 위해 필요

  • 재귀 및 스택으로 구현 가능
  • 장점
    1) 지나온 노드들의 경로만 알고 있으면 되기 때문에 공간을 비교적 적게 차지함
    2) 목표노드가 깊을수록 빨리 해를 구할 수 있음

  • 단점
    1) 해가 없는 경로에 빠질 수 있음 (특정 깊이까지만 탐색하고 발견하지 못하면 다시 돌아가 다른 경로로 이동하는 방법으로 해결가능)
    2) 최단경로가 된다는 보장이 없음 (검색 노드가 발견되면 탐색을 종료하기 때문)

  • 사용예제 (작성 예정)
    1) 미로에서 출구를 찾기 위한 경로 탐색

+ Recent posts