BFS (Breadth First Search)

dowon kim·2023년 9월 3일

BFS (Breadth First Search) 설명:

BFS는 그래프나 트리를 탐색하는 알고리즘 중 하나로, 시작 노드에서 시작하여 인접한 모든 노드를 먼저 탐색하고, 그 다음 레벨의 노드를 탐색하는 방식으로 진행합니다. BFS는 큐를 사용하여 구현됩니다.

BFS의 기본 원칙:
1. 시작 노드를 큐에 넣는다.
2. 큐의 앞부분에서 노드를 제거하고 해당 노드를 방문한다.
3. 해당 노드에 연결된 아직 방문하지 않은 모든 인접 노드를 큐에 넣는다.
4. 큐가 비어있지 않은 동안 2-3단계를 반복한다.

JavaScript에서의 BFS 예제:

let visited = {};  // 방문한 노드를 기록
let graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
};

function bfs(start) {
    let queue = [start];

    while (queue.length > 0) {
        let node = queue.shift();  // 큐의 앞부분에서 노드를 제거

        if (node in visited) continue;  // 이미 방문한 노드는 건너뛴다.
        visited[node] = true;

        console.log(node);  // 현재 노드 출력
        graph[node].forEach(neighbor => {
            if (!(neighbor in visited)) {
                queue.push(neighbor);  // 아직 방문하지 않은 인접 노드를 큐에 추가
            }
        });
    }
}

bfs('A');  // A부터 시작하는 BFS

BFS의 사용 사례:
1. 최단 경로 탐색: 그래프 내의 두 노드 사이의 최단 경로를 찾을 때, 특히 가중치가 없는 그래프에서 유용합니다.
2. 레벨 순서 탐색: 트리에서 각 레벨의 노드를 순서대로 방문할 때 사용됩니다.
3. 연결 요소(Connected Components) 탐색: 그래프 내의 모든 연결 요소를 찾을 때 사용할 수 있습니다.
4. 네트워크 브로드캐스팅: 네트워크에서 모든 노드에 정보를 전달할 때 사용됩니다.

장점:
1. 두 노드 사이의 최단 경로를 찾는 데 유용하다.
2. 시작 노드에서 동일한 거리에 있는 노드를 동일한 순서로 방문합니다.

단점:
1. 모든 가능한 경로를 탐색하는 DFS에 비해 BFS는 더 많은 메모리를 사용할 수 있습니다.

BFS는 특정 노드에서 시작하여 모든 노드를 최단 경로로 방문하는 데 중점을 둡니다. DFS와 비교했을 때, BFS는 특히 최단 경로 문제에서 더 유리한 특성을 갖습니다.

profile
The pain is so persistent that it is like a snail, and the joy is so short that it is like a rabbit's tail running through the fields of autumn

0개의 댓글