깊이 우선 탐색(DFS), 너비 우선 탐색(BFS)

e-pong:)·2022년 11월 18일
0

1. 깊이 우선 탐색(DFS)

1-1) DFS의 개념

루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방식이다.

1-2) DFS의 동작방식

DFS는 스택 자료구조(혹은 재귀함수)를 이용하며, 구체적인 동작 과정은 다음과 같다.
1. 탐색 시작 노드를 스택에 삽입하고 방문 처리한다.
2. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있다면 그 노드를 스택에 넣고 방문처리한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.

1-3) DFS의 특징

  • 모든 노드를 방문하고자 하는 경우에 이 방법을 사용한다.
  • 깊이 우선 탐색(DFS)이 너비 우선 탐색(BFS)보다 좀 더 간단하다.
  • 검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 느리다.

2. 넓이 우선 탐색(BFS)

2-1) BFS 개념

루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법으로, 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법이다.

2-2) BFS 동작방식

BFS는 큐 자료구조를 이용하며, 구체적인 동작 과정은 다음과 같다.
1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다.
2. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에는 방문하지 않는 노드를 모두 큐에 삽입하고 방문 처리한다.
3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.

2-3) DFS의 특징

  • 주로 두 노드 사이의 최단 경로를 찾고 싶을 때 이 방법을 선택한다.

3. DFS와 BFS의 시간복잡도

두 방식 모두 조건 내의 모든 노드를 검색한다는 점에서 시간 복잡도는 동일하다.
DFS,BFS은 특징에 따라 사용에 더 적합한 문제 유형들이 있다.

  • 그래프의 모든 정점을 방문하는 것이 주요한 문제
    : 단순히 모든 정점을 방문하는 것이 중요한 문제의 경우 두 가지 방법 중 어느 것을 사용해도 상관없다.
  • 경로의 특징을 저장해둬야 하는 문제
    : 예를 들어 각 정점에 숫자가 적혀있고, a부터 b까지 가는 경로를 구하는데 경로에 같은 숫자가 있으면 안되는 문제 등, 각각의 경로마다 특징을 저장해둬야 할 때는 DFS를 사용한다.
    (BFS는 경로의 특징을 가지지 못한다.)
  • 최단거리를 구해야 하는 문제
    : 최단 거리를 구해야 할 경우, BFS가 유리하다.
  • 검색 대상 그래프가 정말 클 경우, DFS
  • 검색 대상의 규모가 크지 않고, 검색 시작 지점으로 부터 원하는 대상이 별로 멀지 않다면, BFS
profile
말에 힘이 있는 사람이 되기 위해 하루하루, 성장합니다.

0개의 댓글