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 |
Tags
- 코드스테이츠
- appendChild
- flex기본
- 클로저
- 메모이제이션
- CSS
- JavaScript
- AWS조사
- css기초
- 인터프리터
- scope
- 리커젼
- 기초공부
- node.js설치
- node.js
- 원본과 복사본
- Big-O notation
- prototype
- 재귀함수
- AWS기초
- IT
- AWS
- complexity
- 개발툴
- vscode
- let
- var
- 생활코딩
- 스코프
- APPEND
Archives
- Today
- Total
Jveloper
Tree DFselect(깊이 우선 탐색) 본문
루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법
- 미로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 이곳으로부터 다른 방향으로 다시 탐색을 진행하는 방법과 유사함
- 깊이 우선 탐색(DFS)이 너비 우선 탐색(BFS)보다 좀 더 간단하다
- 검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 느림
Tree {
value: 1,
children: [
Tree { value: 2, children: [Array] },
Tree { value: 3, children: [Array] }
]
}
// 들어오는 형태
1
2 3
4 5 6 7
1. filter(callback)으로 노드의 값을 넣어서 true인 것만 result로 push
2. 모든 탐색이 완료되면 result를 push
3. depth를 확인하는 filter도 존재
4. recursion을 호출할 때 depth를 1씩 증가시켜준다.
Tree.prototype.DFSelect = function(filter) {
let result = [];
let recur = function(node, depth) {
if (filter(node.value, depth)) {
result.push(node.value);
}
if (node.children.length > 0) {
for (let i = 0; i < node.children.length; i++) {
recur(node.children[i], depth + 1);
}
}
};
recur(this, 0);
return result;
};
깊이 우선 탐색의 특징
- 자기 자신을 호출하는 순환 알고리즘의 형태를 지님
- 이 알고리즘을 구현할 때 가장 큰 차이점은 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사해야한다는 것
(이를 검사하지 않을 경우 무한루프에 빠질 위험이 있음)
'알고리즘' 카테고리의 다른 글
Tree BFselect(너비 우선 탐색) (0) | 2019.12.31 |
---|---|
Sort Algorithm 정리 (0) | 2019.12.15 |
힙 정렬(Heap Sort Algorithm) (0) | 2019.12.15 |
선택 정렬(Selection Sort Algorithm) (0) | 2019.12.15 |
삽입 정렬(Insertion Sort Algorithm) (0) | 2019.12.15 |
Comments