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
- 자바스크립트 렉시컬스코프
- 자바스크립트
- touchmove 이벤트
- but requested an insecure XMLHttpRequest endpoint 'http://~~’. This request has been blocked; the content must be served over HTTPS.
- activeElement
- 로현 청춘의개발
- 자바스크립트 옵셔널 체이닝
- active blur
- AWS 로드밸런서
- 자바스크립트 호이스팅
- 자바스크립트 변수 호이스팅
- 자바스크립트 null 병합
- 리액트 가상키보드
- 자바스크립트 논리합 연산자
- 리액트 쿼리
- refetchOnWindowFocus
- 사파리 가상키보드
- 자바스
- 모두의시간
- 자바스크립트 중첩함수
- EC2 HTTPS로 연결
- 퍼듀대학교
- Purdue university
- ios 크로스브라우징
- 모던 자바스크립트 Deep Dive
- K-SW SQUARE
- net::R_SSL_PROTOCOL_ERROR
- React Query
- 자바스크립트 스코프 체인
- Kafka
Archives
- Today
- Total
개발 여행자, 현
[JavaScript] 너비우선탐색(BFS) 깊이우선탐색(DFS)이란? 본문
너비우선탐색(BFS) 깊이우선탐색(DFS)
DFS(깊이우선탐색)이란?
- 정점의 자식인 노드들을 먼저 탐색하는 방식
- 큐와 스택 1개씩 이용
const graph = {
A: ["B", "C"],
B: ["A", "D"],
C: ["A", "G", "H", "I"],
D: ["B", "E", "F"],
E: ["D"],
F: ["D"],
G: ["C"],
H: ["C"],
I: ["C", "J"],
J: ["I"]
};
const bfs = (graph, startNode) => {
let visited = []; // 탐색을 마친 노드들
let needVisit = []; // 탐색해야할 노드들
needVisit.push(startNode); // 노드 탐색 시작
while (needVisit.length !== 0) { // 탐색해야할 노드가 남아있다면
const node = needVisit.shift(); // queue이기 때문에 선입선출, shift()를 사용한다.
if (!visited.includes(node)) { // 해당 노드가 탐색된 적 없다면
visited.push(node);
needVisit = [...needVisit, ...graph[node]];
}
}
return visited;
};
console.log(bfs(graph, "A"));
// ["A", "B", "C", "D", "G", "H", "I", "E", "F", "J"]
BFS(너비우선탐색)이란?
- 정점과 같은 레벨에 있는 노드들을 먼저 탐색하는 방식이다.
- 큐 2개 이용
- 큐에 각 node의 정보를 기록해야 하기 때문에 메모리를 잡아먹음
- 찾고자 하는 target node가 root node와 가까이 있다고 예상될 경우 BFS를 사용한다.
- 지도 어플에서 특정 위치까지의 최단거리 안내, 혹은 소셜미디어에서 친구 추천 등에 이용된다.
const graph = {
A: ["B", "C"],
B: ["A", "D"],
C: ["A", "G", "H", "I"],
D: ["B", "E", "F"],
E: ["D"],
F: ["D"],
G: ["C"],
H: ["C"],
I: ["C", "J"],
J: ["I"]
};
const BFS = (graph, startNode) => {
const visited = []; // 탐색을 마친 노드들
let needVisit = []; // 탐색해야할 노드들
needVisit.push(startNode); // 노드 탐색 시작
while (needVisit.length !== 0) { // 탐색해야할 노드가 남아있다면
const node = needVisit.shift(); // queue이기 때문에 선입선출, shift()를 사용한다.
if (!visited.includes(node)) { // 해당 노드가 탐색된 적 없다면
visited.push(node);
needVisit = [...needVisit, ...graph[node]];
}
}
return visited;
};
console.log(BFS(graph, "A"));
// ["A", "B", "C", "D", "G", "H", "I", "E", "F", "J"]
출처: https://www.fun-coding.org/
'알고리즘' 카테고리의 다른 글
[정렬 알고리즘] 버블정렬 (0) | 2023.04.17 |
---|---|
[정렬 알고리즘] 선택정렬 (0) | 2023.04.17 |
[JavaScript] 프로그래머스 게임 맵 최단거리 (BFS) (1) | 2022.11.14 |
[JavaScript] 프로그래머스 타겟넘버 (DFS, 재귀함수) (0) | 2022.11.14 |
[프로그래머스/JavaScript] K번째 수 (feat. 나의 첫번째 알고리즘 문제) (0) | 2021.10.16 |