-
[알고리즘] 그래프 탐색 알고리즘 - BFS, DFS알고리즘 2023. 1. 26. 12:16
오늘은 비선형 구조 중 그래프를 탐색하는 알고리즘을 배워볼 시간이다.
더보기자료구조
: '데이터의 저장'을 담당하는 것을 말한다.분류
선형 구조 ) 리스트 , 큐, 스택
비선형 구조 ) 그래프, 트리
파일 구조 ) 순차 파일, 색인 파일, 직접파일
단순 구조 ) 정수, 실수, 문자, 문자열
알고리즘
: 표현 및 저장된 데이터를 대상으로 하는 '문제 해결 방법'을 말한다.그래프 탐색 알고리즘
그래프
- 여러 개체들이 연결되어 있는 자료구조
탐색
- 특정 개체를 찾기 위한 알고리즘예시
1. 경로 탐색 ( 최단거리 , 시간)
2. 네트워크 (연결)
3. 조합 (모든 조합 찾기)
DFS
깊이 우선 탐색 알고리즘
stack을 이용 => list의 경우 push(), pop()을 이용
const graph = { //객체를 담아 key.value를 이용한 DFS 풀이 //인접한 노드를 담은 객체 A: ["B", "C"], B: ["A", "D"], C: ["A", "E"], D: ["B", "F"], E: ["C","G"], F: ["D","H","I"], G: ["E","J","K"], H: ["F","L"], I: ["F", "M"], J: ["G","N"], K: ["G","O"], L: ["H"], M: ["I","P"], N: ["J"], O: ["K"], P: ["M"] }; function DFS(graph,start) { let 방문O = []; let 방문X = []; 방문X.push(start); while(방문X.length) { const node = 방문X.pop(); if(!방문O.includes(node)) { 방문O.push(node); //reverse() 제거시 그림 반대로 탐색 방문X.push(...graph[node].reverse()); } } return 방문O; } DFS(graph,"A") (16) ['A', 'B', 'D', 'F', 'H', 'L', 'I', 'M', 'P', 'C', 'E', 'G', 'J', 'N', 'K', 'O']
BFS
넓이 우선 탐색 알고리즘
queue을 이용 => list의 경우 push(), shift() 을 이용
DFS - 깊이 우선 탐색 알고리즘 BFS - 너비 우선 탐색 알고리즘 재귀함수, 스택 큐, 연결 리스트 검증이 쉬움 => easy 문제 시간 복잡도 낮음 => difficult 문제 수행시간 복잡 검증 어려움 O(V+E) O(V+E) const graph = { //객체를 담아 key.value를 이용한 DFS 풀이 //인접한 노드를 담은 객체 A: ["B", "C"], B: ["A", "D"], C: ["A", "E"], D: ["B", "F"], E: ["C","G"], F: ["D","H","I"], G: ["E","J","K"], H: ["F","L"], I: ["F", "M"], J: ["G","N"], K: ["G","O"], L: ["H"], M: ["I","P"], N: ["J"], O: ["K"], P: ["M"] }; function BFS(graph,start) { const 방문O = []; const 방문X = []; 방문X.push(start); while(방문X.length) { const node = 방문X.shift(); if(!방문O.includes(node)) { 방문O.push(node); 방문X.push(...graph[node]); } } return 방문O; } undefined console.log(BFS(graph,"A")); VM3971:1 (16) ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P']
참고로 배열에서 스택과 큐의 구현은 아래 글을 봐주시길 바란다.
더보기Array.prototype.push / pop / shift /unshift
스택
후입 선출 즉, push,pop으로 구현할 수 있다.
큐
선입 선출 즉 push, shift으로 구현할 수 있다.
'알고리즘' 카테고리의 다른 글
[알고리즘 필수] 소수 구하기 (1) 2024.02.02 [알고리즘] 데이터 구조, 자료 구조 분류, 알고리즘, 성능 분석, 누적합 (0) 2023.01.25