본문 바로가기

알고리즘/알고리즘 도감

깊이 우선 탐색

지난 글 : [알고리즘] - 너비 우선 탐색

 

깊은 우선 탐색은 너비 우선 탐색과 마찬가지로 그래프를 탐색하는 알고리즘이다. 시작점으로부터 지정한 정점(목표)에 도달하는 것이 목적이다. 깊이 우선 탐색에서는 정점을 탐색할 때 하나의 길을 끝까지 따라가며 더 이상 진행할 수 없는 곳에 다다르면 다음 후보가 되는 길을 따라간다.

 

1

                   "A"
                  / | \
                 B  C  D
               / |  |  | \
              E  F  H  I  J
              |     |     |
              K     G     L

A를 시작점, G를 목표로 한다. 현재 위치는 " "로 표시한다.

 

2

                   "A"
                  / | \
                'B  C  D'
               / |  |  | \
              E  F  H  I  J
              |     |     |
              K     G     L

A에서 도달할 수 있는 정점 B, C, D를 다음 후보로 표시한다. 후보는 ' '로 표시한다.

 

3

                    A
                  / | \
                "B"'C  D'
               / |  |  | \
             'E  F' H  I  J
              |     |     |
              K     G     L

후보 중 하나의 정점을 선택할 때 기준은 후보 중 가장 최근(가장 늦게) 추가된 것이다. 같은 시점에 후버가 된 정점은 어느 것을 선택해도 상관없다. 여기서는 왼쪽에 있는 정점을 선택한다. B로 이동한다. B로부터 도달할 수 있는 E와 F를 새로운 후보로 추가한다.

 

4

                    A
                  / | \
                 B 'C  D'
               / |  |  | \
             "E"'F' H  I  J
              |     |     |
             'K'    G     L

가장 최근 후보에 추가된 E와 F 중 왼쪽에 있는 E로 이동한다. 현재 위치에서 도달할 수 있는 K를 새로운 후보로 추가한다.

 

5

                    A
                  / | \
                 B 'C  D'
               / |  |  | \
              E "F" H  I  J
              |     |     |
              K     G     L

같은 작업을 목표에 도달하거나 모든 정점의 탐색이 끝날 때까지 반복한다.

 

6

                    A
                  / | \
                 B "C"'D'
               / |  |  | \
              E  F 'H' I  J
              |     |     |
              K     G     L

현재 C까지 탐색했다.

 

7

                    A
                  / | \
                 B  C 'D'
               / |  |  | \
              E  F  H  I  J
              |     |     |
              K    "G"    L

G에 도착했으므로 탐색을 종료한다.

 

깊이 우선 탐색은 너비 우선 탐색과 탐색 순서는 다르지만 처리상 차이점은 후보 정점 중 다음에 이동할 정점을 선택하는 기준 하나만 다를 뿐이다. 너비 우선 탐색은 가장 먼저 후보가 된 것을, 깊이 우선 탐색은 가장 최근에(늦게) 후보가 된 것을 선택하므로 각각 시작점에 가까운 정점부터 탐색, 새로운 길을 찾아 탐색하는 것이다.

 

참고 서적 :

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

다익스트라 알고리즘  (0) 2022.06.20
벨먼-포드 알고리즘  (0) 2022.06.19
너비 우선 탐색  (0) 2022.06.16
그래프  (0) 2022.06.15
이진 탐색  (0) 2022.06.14