자주 사용하게 되는 알고리즘에 대해서 하나씩 알아보겠습니다.
BFS
와 DFS
는 그래프 탐색 알고리즘 중 가장 기본적이고 중요한 알고리즘입니다.
그렇다면 그래프 탐색 알고리즘은 정확히 어떤 알고리즘일까요?
그래프 탐색에 관해서 설명하기 전에, 그래프의 기본적인 개념부터 알아보겠습니다.
그래프는 객체들 간의 이진 관계를 모델링하는데 사용되는 수학적인 구조입니다.
그래프는 노드(Node) 또는 정점(Vertex) 그리고 이러한 노드/정점들을 연결하는 간선(Edge) 으로 구성됩니다.
BFS
는 시작 정점에서 가까운 정점부터 차례대로 그래프의 모든 정점들을 탐색합니다.
function BFS(graph, start) {
let visited = {};
let queue = [start];
while (queue.length) {
let node = queue.shift();
if (!visited[node]) {
console.log(node);
visited[node] = true;
queue.push(...graph[node]);
}
}
}
DFS는 시작 정점에서 멀리 떨어져 있는 정점을 우선적으로 탐색합니다.
function DFS(graph, node, visited = {}) {
if (node in visited) return;
console.log(node);
visited[node] = true;
for (let neighbor of graph[node]) {
DFS(graph, neighbor, visited);
}
}
BFS
, DFS
둘 다 그래프의 모든 노드를 방문한다는 점에서는 동일하지만, 탐색의 순서와 방식에서 차이가 있습니다. 문제의 요구 사항과 그래프의 특성에 따라 적절한 탐색 알고리즘을 선택해야 합니다.