그래프에서의 BFS

Updated:

강의 사이트
  • http://www.kocw.net/home/search/kemView.do?kemId=1148815

그래프 순회

1. 순회(traversal)

  • 그래프의 모든 노드들을 방문하는 일

  • BFS (Breadth-First Search, 너비 우선 순회)
  • DFS (Depth-First Search, 깊이 우선 순회)

2. 너비 우선 순회 (BFS)

  • BFS 알고리즘은 다음 순서로 노들을 방문

2.1 큐를 이용한 너비 우선 순회

2.2 Pseudo Code

2.3 BFS와 최단 경로

  • 최단 경로까지 가는 도중 길이를 저장할 변수가 필요

  • 입력: 방향 혹은 무방향 그래프 G=(V,E), 그리고 출발노드 s∈V
  • 출력: 모든 노드 v에 대해서
    • d[v] = s로부터 v까지의 최단 경로의 길이(에지의 개수)
    • π[v] = s로부터 v까지의 최단경로상에서 v의 직전(이전) 노드(predecessor)
  • 아래는 최단경로 추가한 수도 코드

  • undirected 그래프라고 가정

  • 인접리스트로 표현하면 시간복잡도는 O(n+m)이고 인접행렬로 구현하면 O(n^2)이다.

3. BFS 트리

  • 각 노드 v와 π[v]를 연결하는 에지들로 구성된 트리

  • 어떤 에지도 2개의 Layer를 건너가지 않는다. 다시 말해서 L0에서 L2로 바로 가는 경로는 없다. 어쨌든 L1을 지날 수 밖에 없다는 이야기

3.1 최단 경로 출력하기

  • 그래프가 disconnected이거나 혹은 방향 그래프라면 BFS에 의해서 모든 노드가 방문되지 않을 수도 있음