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 |
Tags
- 리커젼
- node.js설치
- appendChild
- 생활코딩
- prototype
- 클로저
- scope
- AWS
- node.js
- CSS
- let
- vscode
- 원본과 복사본
- 코드스테이츠
- 개발툴
- var
- 재귀함수
- JavaScript
- Big-O notation
- 기초공부
- 스코프
- flex기본
- AWS조사
- css기초
- AWS기초
- IT
- complexity
- 메모이제이션
- APPEND
- 인터프리터
Archives
- Today
- Total
Jveloper
Tree BFselect(너비 우선 탐색) 본문
루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법
Tree {
value: 0,
children: [
Tree { value: 1, children: [Array] },
Tree { value: 2, children: [Array] }
]
} // 들어오는 형태
1. 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법
2. 즉, 깊게 탐색하기 전에 넓게 탐색하는 것
3. 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을때 이 방법을 선택함
Tree.prototype.BFSelect = function(filter) {
let result = [];
let queue = [];
let nextNode;
queue.push({
depth: 0,
node: this
});
while (queue.length > 0) {
nextNode = queue.shift();
if (nextNode.node.children.length > 0) {
for (let i = 0; i < nextNode.node.children.length; i++) {
queue.push({
depth: nextNode.depth + 1,
node: nextNode.node.children[i]
});
}
}
if (filter(nextNode.node.value, nextNode.depth)) {
result.push(nextNode.node.value);
}
}
return result;
};
너비 우선 탐색의 특징
- BFS는 재귀적으로 동작하지 않는다
- 이 알고리즘을 구현할 때 가장 큰 차이점은 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사해야한다
이를 검사하지 않을 경우 무한 루프에 빠질 위험이 있다 - BFS는 방문한 노드들을 차례로 저장한 후 꺼낼 수 있는 자료구조인 큐를 사용한다
즉, 선입선출(FIFO) 원칙으로 탐색한다
너비 우선 탐색 과정
- 깊이가 1인 모든 노드를 방문하고 나서 그 다음에는 깊이가 2인 모든 노드를,
그 다음에는 깊이가 3인 모든 노드를 방문하는 식으로 계속 방문하다가 더 이상 방문할 곳이 없으면 탐색을 마친다
'알고리즘' 카테고리의 다른 글
Tree DFselect(깊이 우선 탐색) (0) | 2019.12.26 |
---|---|
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