Data & ML & AI/NetworkX

[NetwrokX] 방향그래프의 연결성분(Connected Components)

뇌님 2022. 11. 16. 22:14
반응형

지난 글에서는 그래프의 연결성분에 대한 개념을 알아보았습니다.

특히 "무방향" 그래프에 대해서 알아보았습니다.

 

[NetwrokX] 그래프 연결성분(연결요소, Connected Components)

그래프 연결성분(연결요소)이란 쉽게 말해서 서로 분리되어 있는 그래프를 뜻합니다. 위의 (A~O)그래프에서는 3개의 연결성분이 있는거죠. 연결성분의 조건 연결성분 안의 모든 노드들은 동일한

brain-nim.tistory.com

지난번의 포스트가 "무방향"임을 강조하는 이유는,

 

방향그래프에서의 연결성분을 확인하는 방식이 무방향그래프에서와는 조금 다를 수 있기 때문입니다.

 

 

방향그래프의 강연결(Strongly Connected)과 약연결(Weackly Connected)

아시다시피, 방향그래프에서의 엣지는 방향성을 가집니다.

즉, 편도라는 뜻입니다.

 

한 방향으로 밖에 이동할 수 없다는 점에서, 방향그래프의 연결성분을 파악하는데 차이가 발생합니다.

 

강연결 (Strongly Connected)

  • 모든 노드쌍(u,v)에서, u→v, v→u 가 가능한가?

위의 그래프에서 (노드 H)에서 출발하면 (노드 G)에 다다를 수 있습니다. (H→G)

 

그럼 그 반대는요? 

(G)에서 (H)로 갈 수 있는 방법은 없습니다.

 

즉, 위의 그래프는 강연결 상태가 아닙니다.

nx.is_strongly_connected(G)
# False

 

 

약연결 (Weakly Connected)

  • 모든 엣지를 무방향성으로 취급하자
  • 이때, 모든 노드쌍(u,v)에서, u→v, v→u 가 가능한가?

모든 화살표의 방향성을 무시한다면 이제야 (D)에서 (A)까지 갈 수 있습니다.

모든 노드쌍(u, v)에서 u→v, v→u 가 가능합니다.

 

즉, 위의 그래프는 약연결 상태입니다.

nx.is_weakly_connected(G)
# True

 

 

강연결, 약연결 연결성분

연결성분(연결요소, Connected Component)의 개념 및 조건은 무방향그래프와 동일합니다.

 

연결성분의 조건

  • 연결성분 안의 모든 노드들은 동일한 성분 내의 다른 노드와 연결되어 있어야한다.
  • 연결성분 밖에 있는 노드와 연결되면 안된다.

여기서 방향그래프는

"엣지의 방향성을 고려할것인가(강연결) VS 무시할것인가(약연결)"를 생각해야한다는 점에서

무방향 그래프와 차이가 있습니다.

 

강연결 요소 (Strongly connected component)

sorted(nx.strongly_connected_components(G))

# 결과
[{'M'},{'L'},{'K'},{'A','B','C','D','E','F','G','J','N','O'},{'H','I'}]

 

 

약연결 요소 (Weakly connected component)

sorted(nx.weakly_connected_components(G))

# 결과
[{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'}]

 

반응형