그래프 탐색 목적 : 모든 정점(vertex)들을 한 번씩 방문(탐색)하는 것
그래프의 데이터는 배열처럼 정렬되어 있지 않기 때문에 원하는 자료를 찾기 위해서 하나씩 모두 방문해야 한다.
BFS(Breadth-First-Search: 너비 우선 탐색)
시작점에서 가장 가까운 depth의 정점을 순서대로 방문. 주로 두 정점 사이의 최단 경로를 찾을 때 사용
만약, 경로를 하나씩 전부 방문한다면, 최악의 경우에는 모든 경로를 다 탐색해야할 수도 있다.
알고리즘 구현 : 큐를 이용해 다음에 탐색할 노드 저장. 노드 수가 많을수록 더 큰 저장 공간이 필요
DFS(Depth-First-Search: 깊이 우선 탐색)
하나의 경로를 끝가지 탐색한 후, 목표 도착지가 없다면 다음 경로로 넘어가 탐색.
하나의 노선을 끝가지 들어가서 확인하고 다음으로 넘어가기 때문에 운이 좋다면 단 몇 번만에 경로를 찾을 수도 있다.
또는 목표 도착지로 가는 길이 아님을 미리 체크할 수 있다면 바로 그 순간 다음 탐색으로 넘어갈 수 있다.
한 경로를 완벽하게 탐색할 때 사용. BFS보다 탐색 시간이 오래 걸릴 수도 있지만 모든 노드를 탐색할 수 있다.
알고리즘 구현 : 재귀호출 사용
질문
- DFS와 BFS의 장단점은 또 무엇이 있을까요? DFS(장점: BFS에 비해 저장공간의 필요성이 적다. 단점: 찾은 경로가 최단 경로라는 보장없음)
- 그래프가 굉장히 크다면 어떤 탐색 기법을 고려해야 할까요? 탐색시간을 줄이기 위해 BFS를 사용?
- 반대로, 그래프의 규모가 작고, depth가 얕다면 어떤 탐색 기법을 고려해야 할까요? DFS사용
'Algorithm & World Class' 카테고리의 다른 글
[알고리즘] 05_[중복순열] 가위바위보 (0) | 2021.11.10 |
---|---|
고차함수 - 함수 결합시 익명함수로 호출 후 다른 함수 호출시 인자 전달하는 형태 (0) | 2021.10.30 |
(알고리즘) 04_bubbleSort (0) | 2021.10.13 |
(알고리즘) fibonacci, 효율적 알고리즘 구현을 위해 (0) | 2021.10.08 |
(알고리즘) isOdd (0) | 2021.10.06 |