[알고리즘] Graph Traversal - Reachability, Connected Component

박민주·2022년 12월 14일
0

Algorithm

목록 보기
13/16

그래프를 방문하는 여러 방식이 있다.

Any-order Traversal

  • 시작노드 s가 있다.
  • s를 BOX에 넣는다.
  • while BOX is not empty
  • 1) BOX에서 하나의 노드를 꺼낸다.
  • 2) 만약에 노드가 Mark 되어 있지 않으면
  • 2-1) Mark한다
    2-2) 노드에 대한 계산을 수행한다.
    2-3) 해당 노드의 모든 인접 노드를 BOX에 넣는다.

1) Reachability 문제

Any-order Traversal을 통해 다음 문제를 해결할 수 있다.

문제

  • 노드 s에서 시작해서 노드 t에 도달할 수 있는지?
  • 노드 s에서 노드 t로 가는 길이 있는지?

해결방법

  • 노드 s에서 Any-Order Traversal을 시작한다.
  • Traversal 이 끝난 이후에 t가 Mark되어 있는지 확인한다.
  • Mark 되어 있다면 Reachable 한 것이다.

2) Connected Component 문제

  • Traversal 이 끝난 후에 Mark되지 않은 노드에서 다시 Any-order Traversal을 진행한다.
  • 이를 반복하면 어떤 노드끼리 뭉쳐있는지, 즉 Connected Component의 그룹을 구분할 수 있게 된다.

Connected Component

  • 덩어리 내의 노드들은 서로 모든 쌍에 대해 길이 있다.
  • 노드를 더 이상 추가할 수 없다.

같은 그래프에 대해 해당 노드가 어떤 그룹에 속하는지 여러 번 물어보면,
매번 Traversal을 해야 할 것이다.
그런데 한 번 할 때 노드에 자신이 어떤 그룹인지 번호를 매겨놓으면 한 번만 Traversal을 하면 된다.

시간복잡도

  • N: 노드 수, M: 엣지 수
  • 모든 노드 방문 시간 N
  • 인접한 노드를 Box에 넣는 시간 2M

Box에 노드를 몇 번 넣게 되나?

  • 한 노드와 인접한 노드를 넣게 된다.
  • 인접노드는 엣지로 연결되어 있을 것이다.
  • 따라서 각 엣지 당 2개의 노드를 넣게 된다.
profile
Game Programmer

0개의 댓글