A를 시작점으로 깊이 우선 탐색 시 A, B, F, C, G, D, E 순으로 방문한다.
처음에는 왜 A, B, F 다음에 G를 먼저 방문하지 않는지 헷갈렸다. 위 그래프를 마치 트리처럼 생각해서 G가 더 깊이가 깊은 것 아닌가? 하는 생각이었다.
DFS의 동작원리를 보고나서 왜 저런 순으로 진행되는 지 이해할 수 있었다. DFS는 BFS와 달리 연결된 모든 정점을 넣는 것이 아니라, 하나씩 Stack에 쌓는다. 위 그래프는 실제적으로는{A : B, C, D}, {B : A, C, F}, {C: A, F}, ...
와 같은 형태로 저장되어 있을 것이다. 따라서A
정점을 방문 하면B
를 넣고, 다음B
정점을 방문하면C
를 넣고,C
정점을 방문하면F
를 넣을 것이다. 방문한 순간 연결 정보에서 첫 노드를 빼서 쌓는다고 생각하면 쉽다.
추가적으로 BFS와 DFS의 차이를 알아보자.
BFS | DFS | |
---|---|---|
시간 복잡도 | O(V+E) | O(V+E) |
자료구조 | Queue 사용 | Stack 사용 |
최단 경로 문제 | 시작점으로부터 가까운 깊이부터 찾기 때문에, 최소 거리로 목적지에 도달할 수 있다. | 보통 BFS에 비해 더 많은 노드를 순회해야 목적지에 도달 할 수 있다. |
시작점과 가까운 노드 찾기 | 적합 | 부적합 |
시작점과 먼 노드 찾기 | 부적합 | 적합 |
게임 또는 퍼즐 문제 | 부적합, 모든 이웃 노드를 탐색하기 때문에 하나의 결정이 성공일지 실패일지를 파악하는 것이 느리다. | 적합, 하나의 결정이 성공일지 실패일지 BFS보다 빠르게 알 수 있다. |
출처 : https://www.geeksforgeeks.org/difference-between-bfs-and-dfs/
벨로그 표는 도대체 왜 미리보기랑 다르게 나오는걸까..? 가운데 정렬 했는데...
프로그래머스 데브코스 프론트엔드 Day4 [강의] BFS와 DFS
많은 도움 되었어요‼️ 감사합니다🥰