본문 바로가기
Algorithm

[Algorithm] DFS

by graygreat 2021. 1. 8.
728x90
반응형

탐색(Search): 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정

 

DFS/BFS는 대표적인 탐색 알고리즘이다.

 

DFS

DFS는 Depth-First Search, 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.

 

DFS는 스택 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다.

 

1. 탐색 시작 노드를 스택에 삽입하고 방문 처리 한다.

 

2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.

 

3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.

 

다음 그림을 보자.

DFS (출처: https://medium.com/@dwang0816/binary-search-tree-part-2-dfs-c800f8405eaa)

step 1. 시작 노드 '0'을 스택에 삽입하고 방문 처리 한다.

 

step 2. 스택의 최상단 노드인 '0'에 방문하지 않은 인접 노드 '1', '2'가 있다. 이 중에서 가장 작은 노드인 '1'를 스택에 넣고 방문 처리 한다.

 

step 3. 스택의 최상단 노드인 '1'에 방문하지 않은 인접 노드 '3', '4'가 있다. 이 중에서 가장 작은 노드인 '3'을 스택에 넣고 방문 처리 한다.

 

step 4. 스택의 최상단 노드인 '3'에 방문하지 않은 인접 노드가 없다. 따라서 스택에서 '3'번 노드를 꺼낸다.

 

step 5. 스택의 최상단 노드인 '1'에 방문하지 않은 인접 노드 '4'가 있다. 따라서 '4'을 스택에 넣고 방문 처리 한다.

 

step 6. 스택의 최상단 노드인 '4'에 방문하지 않은 인접 노드가 없다. 따라서 스택에서 '4'번 노드를 꺼낸다.

 

step 7. 스택의 최상단 노드인 '1'에 방문하지 않은 인접 노드가 없다. 따라서 스택에서 '1'번 노드를 꺼낸다.

 

step 8. 스택의 최상단 노드인 '0'에 방문하지 않은 인접 노드 '2'가 있다. 따라서 '2'를 스택에 넣고 방문 처리 한다.

 

step 9. 스택의 최상단 노드인 '2'에 방문하지 않은 인접 노드 '5', '6'가 있다. 이 중에서 가장 작은 노드인 '5'을 스택에 넣고 방문 처리 한다.

 

step 10. 스택의 최상단 노드인 '5'에 방문하지 않은 인접 노드가 없다. 따라서 스택에서 '5'번 노드를 꺼낸다.

 

step 11. 스택의 최상단 노드인 '2'에 방문하지 않은 인접 노드 '6'가 있다. 따라서 '6를 스택에 넣고 방문 처리 한다.

 

step 12. 스택의 최상단 노드인 '6'에 방문하지 않은 인접 노드가 없다. 따라서 스택에서 '6'번 노드를 꺼낸다.

 

step 13. 남아 있는 노드에 방문하지 않은 인접 노드가 없다. 따라서 모든 노드를 차례대로 꺼내면 된다.

 

결과적으로 노드의 탐색 순서 (스택에 들어간 순서)는 다음과 같다.

 

0 -> 1 -> 3 -> 4 -> 2 -> 5 -> 6

 

소스 코드

 

반응형

'Algorithm' 카테고리의 다른 글

Dynamic Programming  (0) 2021.01.18
Brute Force & Back Tracking  (0) 2021.01.13
[Algorithm] BFS  (0) 2021.01.08
[Algorithm] 멀티탭 스케줄링 (백준 1931)  (0) 2021.01.07
[Algorithm] Greedy Algorithm (그리디 알고리즘)  (0) 2021.01.04

댓글