주어진 자료구조에서 원하는 정보를 찾거나 특정 목적을 달성하기 위해 시스템적으로 자료를 조사하는 알고리즘이다.
정점과 간선으로 구성된 한정된 자료구조이다. 이때 각각의 지점을 정점이라고 하며, 정점과 정점을 연결하는 선을 간선이라고 부른다.
DFS는 한 경로를 따라 최대한 깊숙이 들어가면서 탐색을 진행한 후, 더 이상 진행할 수 없을 때 다시 돌아가 다른 경로를 탐색하는 방식이다.
O(n)
의 시간복잡도DFS는 특정 시작 노드에서 출발하여 그래프를 탐색하는 알고리즘으로, 다음과 같은 과정을 따른다.
function dfs(graph, start, visited) {
if (!visited[start]) {
console.log(start);
visited[start] = true;
for (let neighbor of graph[start]) {
dfs(graph, neighbor, visited);
}
}
}
const graph = {
1: [2, 3],
2: [4, 5],
3: [],
4: [],
5: [6],
6: [],
};
const visited = {};
dfs(graph, 1, visited);
장점
단점
BFS는 시작 노드에서 출발하여 인접한 모든 노드를 먼저 탐색하고, 그 다음에는 그 인접한 노드들의 인접한 노드들을 차례로 탐색하는 방식이다.
O(n)
의 시간복잡도BFS는 특정 시작 노드에서 출발하여 그래프를 탐색하는 알고리즘으로, 다음과 같은 과정을 따른다.
function bfs(graph, start) {
const queue = [start];
const visited = new Set();
while (queue.length > 0) {
const node = queue.shift();
if (!visited.has(node)) {
console.log(node);
visited.add(node);
for (let neighbor of graph[node]) {
if (!visited.has(neighbor)) {
queue.push(neighbor);
}
}
}
}
}
// 호출 예시
const graph = {
1: [2, 3],
2: [4, 5],
3: [],
4: [],
5: [6],
6: [],
};
bfs(graph, 1);
장점
단점
- DFS는 그래프에서 특정 경로의 존재 여부를 확인하거나, 순서가 중요한 경우에 활용된다.
- BFS는 그래프에서 최단 거리를 찾을 때 유용하다. (DFS의 경우 처음 발견한 해답이 최단 거리가 아닐 수도 있지만, BFS는 현재 노드에서 가까운 곳부터 찾기 때문에 가장 먼저 발견한 해답이 곧 최단 거리이기 때문이다.)