부모와 자식으로 나눠져 있는 트리 그래프

자식은 왼쪽, 오른쪽으로 나눠진다.

 

전위 순회 (전위 탐색)

root -> left -> right

부모 -> 왼쪽 자식 -> 오른쪽 자식

 

중위 순회 (중위 탐색)

left -> root -> righi

왼쪽자식 -> 부모 -> 오른쪽 자식

 

후위 순회 (후위 탐색)

left -> right -> root

왼쪽자식 -> 오른쪽자식 -> 부모

 

깊이 우선 탐색 (DFS, Depth-First Search)

최대한 깊이 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 옆으로 이동

루트 노드에서 시작해서 다음 분기로 넘어가기 전 해당 분기를 완벽하게 탐색하는 방식

 

 

 -  모든 노드를 탐색하고나 하는 경우에 이 방법을 선택함

 -  깊이 우선 탐색이 너비 우선 탐색보다 좀 더 간단함

 -  검색 속도 자체는 너비 우선 탐색에 비해서

 

너비 우선 탐색 (BFS, Breadth-First Search)

최대한 넓게 이동한 다음, 더 이상 갈 수 없을 때 아래로 이동

루트 노드에서 시작해서 인접한 노드를 먼저 탐색하는 방식

 

 

 -  주로 두 노드 사이의 최단 경로를 찾고 싶을 때 사용

 

ex) 'A'라는 사람의 모든 친구 관계를 그래프로 표현한 후에

      'B'와 'C' 둘 사이에 존재하는 경로를 찾는 경우

 

   -  DFS는 모든 친구 관계를 다 살펴봐야 할수도 있음

   -  BFS는 B와 가까운 관계부터 탐

 

DFS와 BFS 비교

 

DFS(깊이 우선 탐색)

- 현재 정점에서 갈 수 있는 점들까지 들어가면서 탐색

- 스택 또는 재귀함수로 구현

 

BFS(너비 우선 탐색)

- 현재 정점에 연결된 가까운 점들부터 탐색

- 큐를 이용해서 구

 

두 방식 모두 조건 내의 모든 노드를 검색한다는 점에서 시간복잡도는 동일

 

+ Recent posts