1. 깊이 우선 탐색 (DFS, Depth-First Search)
- 한 우물부터 깊이 판다.
- 스택 이용
Ex)
<hide/>
//깊이 우선 탐색 코드
public static void SearchDepthFirst(Node node) {
Stack<Node> stack = new Stack<>();
stack.push(node);
while(!stack.empty()) { // 스택이 비는 순간 끝
Node next = stack.pop();
System.out.println(next.data); // 방문해서 출력
for(Node child : next.children ) {
stack.push(child);
}
}
}
2. 너비 우선 탐색 (BFS, Breadth-First Search)
- 여러 우물을 동시에 같은 깊이로
- 큐를 이용한다.
- 최단경로찾기에 적합하다.
- 재귀적으로 이용하기 힘듦.
Ex)
<hide/>
// 너비우선탐색코드
public static void searchBreadthFirst(Node node) {
Queue<Node> queue = new LinkedList<>();
queue.add(node);
while(!queue.isEmpty()) {
Node next = queue.remove();
for(Node child : next.children) {
queue.add(child);
}
}
}
3. DFS와 BFS 비교
- DFS: 자식부터 탐색/ 메모리 사용량이 적다. / 캐시 메모리에 적합 / 병렬처리에 적합
- BFS: 이웃부터 탐색/ 최소 깊이의 결과를 찾는다. / 깊이가 무한인 트리에도 사용가능
'자료구조와 알고리듬 With Java > [프로그래머스] Algorithm' 카테고리의 다른 글
Part 03 Map (0) | 2022.03.22 |
---|---|
Part 02 Array와 List (0) | 2022.03.21 |
Part 01 시작하기 (0) | 2022.03.21 |
동적 계획법, 그리고 알고리즘 (0) | 2022.03.20 |
트리, 이진 탐색 트리, 레드-블랙 트리 (0) | 2022.03.17 |