자료구조와 알고리듬 With Java/[프로그래머스] Algorithm
깊이 우선 탐색(DFS, Depth-First Search)
계란💕
2022. 3. 18. 17:18
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: 이웃부터 탐색/ 최소 깊이의 결과를 찾는다. / 깊이가 무한인 트리에도 사용가능