Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 그래프
- 유니온파인드
- 백준
- 다시보기
- 코딩테스트실력진단
- 기본유형
- 코딩테스트
- database
- Spring
- DFS
- Union Find
- 코테
- JPA
- 알고리즘
- BFS
- 코드트리
- SSAFY
- JUnit
- 그리디
- 알고리즘기본개념
- DP
- 트러블슈팅
- 완탐
- 부분수열의합2
- Java
- 완전탐색
- 싸피
- 자바
- SWEA
- 다익스트라
Archives
- Today
- Total
HwangHub
BFS와 DFS 본문
BFS
- 너비 우선 탐색은 출발점에서 가장 가까운 노드부터 방문하며, 차례대로 모든 노드를 방문하는 알고리즘입니다.
- 따라서 원하는 위치가 있고, 그 위치까지 도달하는 데에 걸리는 최소 시간 또는 최단 경로를 구하고 싶다면 BFS가 적절합니다.
- BFS는 FIFO 구조인 Queue를 사용하여 로직을 구성하며, 자바에서는 LinkedList<>()로 Queue를 구현합니다.
- 그래프 문제의 공통점이지만, 이미 방문한 노드는 다시 방문하지 않을 예정이므로, 이를 감안하여 로직을 구성해야 합니다.
- 주로 길찾기 문제를 BFS로 풉니다.
DFS
- 반면에, 깊이 우선 탐색(Depth-First Search, DFS)은 시작 노드에서 가장 멀리 있는 노드를 우선적으로 탐색합니다.
- 이는 모든 경로를 탐색하고, 그 중에서 최적의 답을 도출할 때 유용합니다.
- DFS는 이론상 LIFO구조인 Stack을 사용하는데, 실제로 문제를 풀 때에는 굳이 공간을 할당하지 않고 대부분 Stack을 사용하는 대신 재귀함수 구조를 취하여 해당 효과를 누립니다. 대신 stack Overflow를 유의해야 합니다.
- DFS는 한 번 방문한 노드를 다시 방문하면 안 된다. 따라서 노드 방문 여부를 체크할 배열이 필요하고, 그래프는 인접 리스트로 표현한다.
- 만약 BFS의 queue사이즈가 엄청 커질 때에는 DFS로 푸는 게 좋습니다.
- 활용 예시는 그래프 완전 탐색이라는 기본적인 예시와 동시에, 깊은 내용으로는 단절점 찾기, 단절선 찾기, 사이클 찾기, 위상 정렬에 사용된다.
'CS-STUDY > 자료구조 & 알고리즘' 카테고리의 다른 글
시간복잡도 (0) | 2023.07.21 |
---|---|
코딩테스트 시작 전 유형 익히기 (0) | 2023.07.11 |
[그래프] 인접 행렬, 인접 리스트 (스크랩) (0) | 2023.07.11 |
배열을 다룰 때 인풋 범위가 음수 포함이라면 (0) | 2023.07.08 |
시뮬레이션 : 시간/날짜 (0) | 2023.07.05 |
Comments