기어가더라도 제대로
[코쿼 알고리즘 스터디 with 케이시] BFS, DFS 본문
BFS
Breadth - First - Search
너비 우선 탐색이다.
최단 거리를 구하는 알고리즘에서 사용이 된다.
DFS
Depth - First - Search
깊이 우선 탐색
마찬 가지로 최단 거리를 구하는 알고리즘에서 사용된다.
사용처
- 최단 거리를 구하는 알고리즘
- 그림판 알고리즘
D에서 G로 가는 최단거리는?
그래프 탐색 알고리즘
- 너비 우선 탐색
- 깊이 우선 탐색
너비 우선 탐색
- 같은 깊이에 해당하는 정점부터 탐색하는 알고리즘
- 정점, A,B,C 등 기준점
큐를 이용해 탐색한 정보를 관리
- D를 먼저 탐색 -> D를 엔큐
- 이어서 같은 거리에 있는 E, A 등을 탐색 -> E, A를 엔큐
- D를 디큐,
- E를 디큐하고 E에서 갈 수 있는 정점이 없으므로 엔큐는 하지 않는다.
- A에서 갈 수 있는 B와 C를 엔큐, 그리고 A를 디큐
- B에선 F로 갈 수 있으므로 F를 엔큐, A는 한번 거친 길이므로 엔큐하지 않는다.
- B를 디큐
- C를 디큐, C에선 다 가본 정점뿐이 없으므로 엔큐하지 않는다.
- G를 엔큐, F 를 디큐, 최종적으로 G를 디큐
정리하면, 시작점을 엔큐하고, 시작점에서 갈 수 있는 정점을 엔큐하고, 시작점을 디큐한다.
큐의 가장 앞에 있는 정점에서, 갈 수 있는 정점을 엔큐하고, (없으면 하지 않고) 가장 앞 큐를 디큐한다.
그 다음 가장 앞에 있는 큐에서 갈 수 있는 정점을 엔큐하고, 그 다음 가장 앞 큐를 디큐한다.
반복 ~ 참고로 Queue는 First In First Out 의 구조이다.
BFS 특징
- Queue 를 이용하여 구현할 수 있다.
- 시작 지점에서 가까운 정점부터 탐색한다.
- V가 정점의 수, E가 간선의 수일 때, BFS의 시간복잡도는 O(V + E)다.
깊이 우선 탐색
그래프 탐색 알고리즘으로 최대한 깊은 정점부터 탐색하는 알고리즘
DFS 특징
- 스택을 이용하여 구현할 수 있다.
- 시작 정점에서 깊은 것 부터 찾는다.
- V가 정점의 수, E가 간선의 수 일 때 BFS의 시간 복잡도는 O(V + E) 다.
1. A를 스택에 푸쉬한다.
2. A에서 갈 수 있는 B를 푸쉬한다.
3. B에서 갈 수 있는 F를 푸쉬한다.
4. F에서 갈 수 있는 C를 푸쉬한다.
5. C에선 더 갈 정점이 없으므로 TOP 인 C를 팝한다.
6. 다시 F에서 갈 수 있는 G를 푸쉬한다.
7. 더 이상 갈 정점이 없으므로, B,F,G 정점을 팝한다.
8. A에서 갈 수 있는 D 를 푸쉬한다.
9. D에서 갈 수 있는 E를 푸쉬한다.
10. 더 이상 갈 곳이 없으므로, A, D, F를 팝한다.
참고로, Stack 은 Last In First Out 의 구조이다.
요약하자면, 시작점을 푸쉬한다. A
그 한 지류를 갈 수 있는 끝까지 가는 모양새다.
BFS 는 파문형으로 넓어져 나가며, DFS 는 가로질러서 탐색한다.
'CS > 자료구조' 카테고리의 다른 글
[알고리즘 스터디 with 케이시] 선형 자료구조 - 배열 (0) | 2022.07.22 |
---|---|
[알고리즘 스터디 with 케이시] 비선형 자료구조 - 그래프 (0) | 2022.07.21 |
좌표 사이의 거리를 구하는 로직 (0) | 2022.05.30 |
소수 구하는 메서드 (0) | 2022.05.30 |
"seven" -> 7 (0) | 2022.05.04 |