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
- level2
- 탐욕법
- 유클리디안 거리
- 알고리즘 성능분석
- 그리디
- java 정규표현식
- LinkedList
- 순열
- 연결리스트
- 프로그래머스
- 자료구조
- 큐
- 알고리즘
- list
- 수식트리
- android
- 약수의 총 합
- 유클리드 거리
- 보간 탐색
- 스택
- 정렬
- visited
- 빅-오
- Java
- interpolation search
- 양방향 연결 리스트
- 순차 리스트
- 맨하탄 거리
- space complexity
- 단체사진 찍기
Archives
- Today
- Total
개발자로 살아남기
깊이 우선 탐색 (DFS, Depth-First Search) 본문
깊이 우선 탐색
깊이 우선 탐색
- DFS (Depth-First Search)
- 깊이 우선 탐색 시 끝없이 깊어지는 것을 방지하기 위해 깊이 제한 적용 (조건을 이용)
- 목표 노드에 도달하지 못하면 부모노드로 되돌아감 (부모노드로 되돌아가는 것을 백트래킹(backtracking)이라고 함)
- 하나의 정점에서 아래쪽으로 깊게 탐색 후 더이상 탐색이 불가능하면 되돌아가 인접한 다른 노드를 탐색
- 시간 복잡도 : O(V + E)
V : 정점의 개수 (위 사진에서 A, B, C, D, E, F, G)
E : 간선의 개수 (각 정점을 잇는 선) - 공간 복잡도 : O(V)
방문 여부를 확인하기 위한 visited 배열 추가 필요 - 방문 여부를 확인하기 위한 visited 배열 필요성
방문 여부를 체크하지 않으면 두 번 탐색할 수 있음. (ex. D에서 부모노드로 돌아갔을 때 또 비교할 수 있음)
싸이클(무한루프) 방지를 위해 필요 - 재귀 및 스택으로 구현 가능
- 장점
1) 지나온 노드들의 경로만 알고 있으면 되기 때문에 공간을 비교적 적게 차지함
2) 목표노드가 깊을수록 빨리 해를 구할 수 있음 - 단점
1) 해가 없는 경로에 빠질 수 있음 (특정 깊이까지만 탐색하고 발견하지 못하면 다시 돌아가 다른 경로로 이동하는 방법으로 해결가능)
2) 최단경로가 된다는 보장이 없음 (검색 노드가 발견되면 탐색을 종료하기 때문) - 사용예제 (작성 예정)
1) 미로에서 출구를 찾기 위한 경로 탐색
'0x20. 알고리즘 > 0x21. 이론' 카테고리의 다른 글
[JAVA] 삽입 정렬 (Insertion Sort) (0) | 2021.11.04 |
---|---|
[JAVA] 선택 정렬 (Selection Sort) (0) | 2021.11.03 |
[JAVA] 버블 정렬 (Bubble Sort) (0) | 2021.11.02 |
순열(Permutation) 구하기 (0) | 2021.10.06 |
그리디(Greedy) 알고리즘 (탐욕 알고리즘) (0) | 2021.10.05 |