콘텐츠로 이동

Chapter 11. Graph(그래프)

0절. 개요

1절. 너비 우선 탐색

2절. 깊이 우선 탐색

3절. 최소 신장 트리

4절. 최단 경로

0절. 개요

그래프(Graph)

  • 현상이나 사물을 정점과 간선으로 표현
  • \(Graph\) \(G\) = \((V,E)\)
  • \(V\) : vertex set
  • \(E\) : edge set
  • 정점(Vertex) : 대상 or 개체
  • 간선(Edge) : 정점 간 관계
  • 인접(Adjacent) : 두 정점이 간선으로 연결된 경우

인접 행렬(Adjacent Matrix)

  • 정점(Vertex의 총 수 : N)
  • N ⅹ N 행렬 표현
    • 원소 (i, j) = 1 : 정점 i와 정점 j 사이 간선 존재
    • 원소 (i, j) = 0 : 정점 i와 정점 j 사이 간선 미존재
  • 유향 그래프
    • 원소 (i, j) : 정점 i로부터 정점 j로 연결되는 간선이 있는가?
  • 가중치 그래프
    • 원소 (i, j) : 1 대신 가중치

예시

  • 친분 관계 그래프

  • 친분 관계 그래프 + 가중치

  • 친분 관계 그래프 + 방향
  • 유향 그래프(Directed Graph)

  • 친분 관계 그래프 + 가중치 + 방향
  • 유향 그래프(Directed Graph)

인접 리스트(Adjacent List)

  • N개의 연결 리스트 표현
  • i번째 리스트 : 정점 i에 인접한 정점들을 리스트로 연결
  • 가중치 그래프
  • 리스트에 가중치도 보관

예시

  • 친분 관계 그래프

  • 친분 관계 그래프 + 가중치

너비 우선 탐색과 깊이 우선 탐색

  • 그래프에서 모든 정점을 방문하는 가장 기본적인 탐색 알고리즘
  • 시간 복잡도(Time Complexity)
  • O(V + E)
탐색 종류 영문 약어 영문
너비 우선 탐색 BFS Breadth First Search
깊이 우선 탐색 DFS Depth First Search

1절. 너비 우선 탐색

  • Breadth = broad / wide
  • 자료구조
  • 큐(queue : FIFO)
  • 수행 시간
  • \(θ(|V| + |E|)\)

너비 우선 탐색 과정

  • 값 출력 순서
  • 1, 2, 3, 4, 5, 6, 7, 8

너비 우선 탐색 알고리즘

2절. 깊이 우선 탐색

  • Depth = vertical before horizontal
  • 자료구조
  • Stack(FILO)
  • 수행 시간
  • \(θ(|V| + |E|)\)

깊이 우선 탐색 과정

  • 값 출력 순서
  • 5, 4, 3, 2, 7, 6, 8, 1

3절. 최소 신장 트리

최소 신장 트리(MST : Minimum Spanning Tree)

  • 간선 가중치의 합이 가장 작은 트리

트리(Tree)

  • 싸이클이 없는 연결 그래프
  • N 개의 정점을 가지는 트리가 N - 1개의 간선 보유

신장 트리(Spanning Tree)

  • 그래프 G(V, E)에서 정점 집합 V를 그대로 두고 간선을 |V| - 1개만 남겨 트리 생성(|V| = N)
  • ex) 너비 우선 트리, 깊이 우선 트리

Prim's Algorithm

  • 그리디 알고리즘의 일종
  • 최소 신장 트리(MST) 문제에서는 항상 최적해 보장
  • 수행 시간
  • 최소 가중치 탐색 시 힙(Heap) 사용
  • \(O(|E|log|V|)\)

Prim 알고리즘 구조

Kruskal's Algorithm

  • 그리디 알고리즘의 일종
  • 최소 신장 트리(MST) 문제에서는 항상 최적해 보장
  • 수행 시간
  • \(O(|E|log|V|)\)

Kruskal 알고리즘 구조

Kruskal 알고리즘 예시

  • 정답

4절. 최단 경로

최단 경로

  • 단일 시작점으로부터 각 정점에 이르는 최단 경로
  • 그래프 G(V, E) 시작 노드 s에서 목적지 d의 연결 비용 합이 최소인 가중치 집합 C 계산

최단 경로 조건

  • 간선 가중치가 있는 유향 그래프
  • 무향 그래프의 경우
  • 각 간선에 대해 양쪽으로 유향 간선이 있는 유향 그래프로 간주
  • 즉, 무향 간선(u, v)는 유향 간선 (u, v)와 (v, u)를 의미

두 정점 사이 최단 경로

  • 두 정점 사이 경로들 중 간선 가중치 합이 최소인 경로
  • 간선 가중치의 합이 음인 싸이클이 존재하면 문제 정의 X

최단 경로 종류

종류 영문 설명
다익스트라 알고리즘 Dijkstra's Algorithm 한 정점에서 다른 모든 정점까지의 최단 경로
음의 가중치를 허용하지 않는 최단 경로
벨만포드 알고리즘 Bellman-Ford's Algorithm 한 정점에서 다른 모든 정점까지의 최단 경로
음의 가중치를 허용하는 최단 경로
플로이드-워샬 알고리즘 Floyd-Warshall Algorithm 모든 정점에서 다른 모든 정점까지, 음의 가중치를 가진 최단 경로
싸이클이 없는 그래프의 최단 경로

다익스트라 알고리즘(Dijkstra's Algorithm)

  • 모든 간선 가중치는 양수
  • 수행 시간
  • 힙 이용
  • \(O(|E|log|V|)\)

다익스트라 알고리즘 구조

다익스트라 알고리즘 과정

잘못된 다익스트라 알고리즘 : 음수 가중치

벨만포드 알고리즘(Bellman Ford's Algorithm)

  • \(d_t^k\) : 중간에 최대 k개 간선을 거쳐 정점 r로부터 정점 t에 이르는 최단 거리
  • 목표 : \(d_t^{n-1}\)
  • 수행 시간
  • \(θ(|E||V|)\)
  • 재귀적 관계

벨만포드 알고리즘 구조

벨만포드 알고리즘 과정

플로이드-워샬 알고리즘(Floyd-Warshall Algorithm)

  • 모든 정점 간 상호 최단거리 계산
  • 음의 가중치 허용
  • 수행 시간
  • \(θ(|V|^3)\)
  • 문제의 총 수 : \(θ(|V|^3)\), 각 문제 계산 : \(θ(1)\)

플로이드-워샬 알고리즘 구조

플로이드-워샬 알고리즘 과정