본문 바로가기

CS지식/알고리즘

[CS 지식 - 알고리즘] DFS와 BFS

1. 그래프 탐색 알고리즘 

  • 탐색(Search)은 많은 양의 데이터중에서 원하는 데이터를 찾는 과정
  • 종류 - DFS
            - BFS

2. DFS(Depth - First  Search) : 깊이우선 탐색

  • 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘
  • 특징 - 자기 자신을 호출하는 순환 알고리즘 형태를 가지고 있음
            - 전위 순회(Pre-Order-Traversals)를 포함한 다른 형태의 트리 순회는 모두 DFS의 한 종류
            - 어떤 노드를 방문했었는지 여부를 반드시 검사해야함
               ▶ 검사하지 않으면 무한루프에 빠질 위험이 있음
            - Stach 자료구조(후입선출)사용
  • 과정

  1. a노드(시작 노드)방문
    ▶ 방문한 노드는 방문했다고 표시
  2. a와 인접한 노드를 차례로 순회함
    ▶  a와 인접한 노드가 없다면 종료
  3. a와 이웃한 노드 b를 방문했다면, a와 인접한 또 다른 노드를 방문하기 전에 b의 이웃 노드들을 전부 방문
    ▶ b를 시작 정접으로 DFS를 다시 시작하여 b의 이웃 노드를 방문
  4. b의 분기를 완벽하게 탐색했다면 다시 a에 인접한 정점들 중에서 아직 방문이 안된 정점을 찾음
    ▶ b의 분기를 전부 완벽하게 탐색한 뒤에야 a의 다른 이웃 노드를 방문 할 수 있다는 뜻
    ▶ 아직 방문 안된 정점이 없으면 종료
    ▶있으면 다시 그 정점을 시작정점으로 DFS를 시작

 

3. BFS(Breadth-First Search) : 너비 우선 탐색

  • 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘
  • 특징 - 직관적이지 않음
               ▶ BFS는 시작 노드에서 시작해서 거리에 따라 단계별로 탐색한다고 볼 수 있음
            - 재귀적으로 동작하지 않음
               ▶어떤 노드를 방문 했었는지 여부를 반드시 검사해야함
               ▶검사하지 않으면 무한루프에 빠질 가능성있음 
            - Queue(선입선출) 사용
            - 'Prim', 'Dijkstra'알고리즘과 유사

  1. a노드(시작노드)방문 (방문한 노드 체크)
    - 큐에 방문된 노드를 삽입
    - 초기 상태의 시작 노드만 저장
      ▶ a노드의 이웃 노드를 모두 방문한 다음에 이웃의 이웃들을 방문
  2. 큐에서 꺼낸 노드와 인접한 노드들을 모두 차례로 방문
    - 큐에서 꺼낸 노드 방문
    - 큐에서 꺼낸 노드와 인접한 노드 방문
      ▶ 인접한 노드가 없다면 큐의 앞에서 노드를 꺼냄
    - 큐에 방문된 노드를 삽입
  3. 큐가 소진될때까지 계속함

 

 

 

더보기