SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

그래프의 표현과 기본 성질

방향·무방향·가중 그래프와 인접행렬·인접리스트의 특성을 비교한다.

예상 읽기 5

1. 그래프의 구성

그래프 G=(V,E)는 정점 집합 V와 정점 사이 관계인 간선 집합 E로 구성된다.

  • 무방향 그래프: 간선 (u,v)(v,u)를 같은 것으로 본다.
  • 방향 그래프: 간선 <u,v>는 u에서 v로 향한다.
  • 가중 그래프: 간선에 거리·비용·시간 같은 값이 있다.
  • 단순 그래프: 자기 루프와 중복 간선이 없다.

2. 기본 용어

  • 경로: 정점과 간선을 따라 이동한 순서
  • 단순 경로: 같은 정점을 반복하지 않는 경로
  • 사이클: 시작과 끝 정점이 같은 경로
  • 연결 그래프: 무방향 그래프에서 모든 정점 쌍 사이에 경로가 존재한다.
  • 강연결: 방향 그래프에서 서로 양방향으로 도달 가능하다.
  • 차수: 무방향 그래프에서 정점에 연결된 간선 수
  • 진입차수·진출차수: 방향 그래프에서 들어오는·나가는 간선 수

무방향 그래프에서는 모든 정점 차수의 합이 2|E|이다. 방향 그래프에서는 진입차수 합과 진출차수 합이 각각 |E|이다.

3. 그래프 표현

인접행렬

정점 수가 V일 때 V×V 배열을 사용한다.

  • 두 정점의 연결 여부를 O(1)에 확인한다.
  • 공간은 O(V²)이다.
  • 간선이 많은 밀집 그래프에 유리하다.
  • 한 정점의 모든 이웃을 찾으려면 한 행을 확인하므로 O(V)이다.

인접리스트

각 정점마다 연결된 이웃 목록을 저장한다.

  • 공간은 O(V+E)이다.
  • 희소 그래프에 유리하다.
  • 한 정점의 이웃 순회는 그 정점의 차수에 비례한다.
  • 특정 두 정점의 연결 여부는 목록 탐색이 필요할 수 있다.
비교인접행렬인접리스트
공간O(V²)O(V+E)
간선 존재 확인O(1)차수에 비례
이웃 순회O(V)O(deg(v))
적합한 그래프밀집희소

4. 트리와 그래프의 관계

트리는 사이클이 없는 연결 무방향 그래프이다. 정점이 V개인 트리는 간선이 정확히 V-1개이며, 임의의 두 정점 사이의 단순 경로가 하나뿐이다.

5. 그래프 표현 도식

무방향 그래프의 간선이 {A-B, A-C, B-D, C-D}라 하자.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
A ----- B
|       |
|       |
C ----- D

인접행렬과 인접리스트는 다음처럼 대응한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
    A B C D            A: B, C
A [ 0 1 1 0 ]          B: A, D
B [ 1 0 0 1 ]          C: A, D
C [ 1 0 0 1 ]          D: B, C
D [ 0 1 1 0 ]

무방향 인접행렬은 주대각선을 기준으로 대칭이다. 자기 루프가 있으면 대각 원소가 1 또는 가중치를 가질 수 있다.

6. 차수와 간선 수 계산

무방향 그래프의 차수 합은 2|E|이다. 완전 무방향 그래프 K_n의 간선 수는 n(n-1)/2, 완전 방향 그래프에서 자기 루프를 제외한 간선 수는 n(n-1)이다.

이분 그래프의 정점을 두 집합으로 나눌 수 있고 같은 집합 내부에는 간선이 없다. 완전 이분 그래프 K_{p,q}의 간선 수는 pq이다.

7. 연결성과 강연결

방향 그래프에서 u→v가 가능하다고 v→u도 가능한 것은 아니다.

  • 강연결 요소(SCC): 내부 모든 정점 쌍이 서로 도달 가능
  • 약연결: 간선 방향을 무시했을 때 연결
  • 축약 그래프: 각 SCC를 하나의 정점으로 줄이면 DAG가 된다.

8. 트리 판정의 동치 조건

정점이 V개인 단순 무방향 그래프에서 다음 조건은 서로 밀접하다.

  • 연결이고 간선이 V-1개
  • 사이클이 없고 간선이 V-1개
  • 임의의 두 정점 사이 단순 경로가 정확히 하나
  • 임의의 간선 하나를 제거하면 연결이 끊어짐

단, 조건 일부만 보고 트리라고 단정할 때는 연결성 또는 사이클 여부가 함께 보장되는지 확인한다.

9. 표현 선택과 복잡도

인접리스트에서 모든 정점의 이웃을 순회하면 무방향 간선은 양쪽 목록에 한 번씩 나타나 총 O(V+E)이다. 인접행렬은 모든 칸을 확인해 O(V²)이다.

PYTHON코드 영역 안에서 좌우로 이동할 수 있습니다.
adj = {
    'A': ['B', 'C'],
    'B': ['A', 'D'],
    'C': ['A', 'D'],
    'D': ['B', 'C']
}

간선 존재 질의가 매우 많고 V가 작거나 밀집 그래프라면 행렬이, 대규모 희소 그래프에서 이웃 순회가 중심이면 리스트가 유리하다.

10. 흔한 오판

  • 방향 그래프의 차수 합은 진입차수 합 = 진출차수 합 = |E|이다.
  • 가중치 0은 “간선 없음”과 구분해야 하므로 행렬에서 무한대·별도 불리언을 쓸 수 있다.
  • 다중 그래프에서는 두 정점 사이 중복 간선 수를 표현해야 한다.

최종 확인 문제

  1. 정점 9개의 완전 무방향 그래프의 간선 수를 구하시오.
  2. 완전 이분 그래프 K_{4,7}의 간선 수를 구하시오.
  3. 방향 그래프에 간선이 12개라면 전체 진입차수 합과 진출차수 합은 각각 얼마인가?
  4. 정점 8개, 간선 7개인 무방향 그래프가 반드시 트리인지 판단하고 이유를 쓰시오.
  5. 대규모 희소 그래프에서 모든 이웃을 반복 순회할 때 인접리스트가 유리한 이유를 설명하시오.