본문 바로가기

알고리즘

그래프 알고리즘 (Graph Algorithm)

그래프와 관련된 용어와 자료구조, 알고리즘을 정리합니다.

 

목차

  • 용어 정리
  • 인접 행렬, 인접 리스트
  • 관련 알고리즘

 

 

용어 정리

graph: 정점과 정점 사이를 연결하는 간선으로 이루어진 비선형 자료구조

 

 

vertex: 정점

 

 

adjacent vertex: 특정 정점에 직접 연결된 정점

 

 

edge: 방향이 없는 그래프에서 두 정점을 연결하는 간선

 

 

 

 

vertext 2의 degree: 2

degree: 정점에 연결된 간선의 수

 

vertex 2의 in-degree: 2 / vertext 1, 3의 out-degree: 1

in-degree: 정점으로 들어오는 간선의 수 (방향이 있는 그래프)

out-degree: 정점에서 나가는 간선의 수 (방향이 있는 그래프)

 

 

vertext 1에서 출발하여 다시 돌아올 수 있으므로 cycle 형성

cycle: 특정 정점에서 출발하여 원래 정점으로 돌아오는 경로

 

weighted graph: 간선에 가중치 값이 매겨진 그래프

 

 

 

네트워크 모델(network model): 현실 세계의 연결 관계를 수학적으로 표현한 것. 

 

예시

  • 도로망: 도시(정점), 도로(간선)
  • 소셜 네트워크: 사람(정점), 친구 관계(간선)
  • 데이터 흐름: 컴퓨터(정점), 패킷 경로(간선)

 

순환 그래프(Cyclic Graph): 출발점에서 간선을 따라가면 다시 자기 자신으로 돌아올 수 있는 그래프.
탐색 시 방문한 노드를 체크하지 않으면 무한 루프 위험이 있음.

 

 

비순환 그래프(Acyclic Graph): 출발점에서 어떠한 경로로도 자기 자신으로 돌아올 수 없는 그래프.

 

 

방향이 있는 비순환 그래프(Directed Acyclic Graph): 방향이 있고 어떠한 경로로도 자기 자신으로 돌아올 수 없는 그래프.

순서가 있는 의존 관계로 표현이 가능하고 사이클이 생기면 순서가 꼬였다고 볼 수 있다.

 

 

무방향 그래프(Undirected Graph): 간선에 방향이 없고, 양방향 이동

 

 

방향 그래프(Directed Graph): 간선에 방향이 있고, 일방향 이동

(1 -> 2)과 (2 -> 1)은 다른 간선이다.

 

 

연결 그래프(Connected Graph): 모든 정점으로 이동하는 경로가 존재하는 그래프

 

 

비연결 그래프(Disconnected Graph): 특정 정점 사이로 이동 가능한 경로가 없는 그래프.

그래프가 여러 개의 sub-graph로 나뉘어 있음.

 

 

완전 그래프(Complete Graph): 모든 정점이 서로 직접 연결된 그래프.

정점이 n개 일 때, (간선의 수) E = n * (n - 1) / 2

 

 

인접 행렬(Adjacency Matrix)

그래프를 2차원 배열로 표현

 

** V: 정점의 수

시간복잡도: O(V²)

공간복잡도: O(V²)

 

방향 그래프(Directed Graph): graph[a][b] !== graph[b][a]

대칭성 없음.

 

  A B C
A 0 1 0
B 0 0 1
C 0 0 0

 

 

무방향 그래프(Undirected Graph): graph[a][b] == graph[b][a]

대칭성 있음.

  A B C
A 0 1 0
B 1 0 1
C 0 1 0

 

 

인접 리스트(Adjacency List)

** V: 정점의 수

** E: 간선의 수

시간복잡도: O(E)

공간복잡도: O(V + E)

 

정점이 많고 간선이 적은 희소 그래프(sparse graph)에서 비효율적.

 

방향 그래프(Directed Graph)

A: [B]
B: [C]
C: [ ]

 

 

무방향 그래프(Undirected Graph)

A: [B]
B: [A, C]
C: [B]

 

 

관련 알고리즘

탐색 알고리즘(Graph Traversal)

  • DFS: 그래프의 한 노드에서 시작해 최대한 깊이 들어간 후, 더 이상 갈 곳이 없으면 돌아와서 다른 경로를 탐색.
  • BFS: 그래프의 한 노드에서 시작해 가까운 노드들을 차례대로 탐색.

 

최단 경로 알고리즘

  • 다익스트라(Dijkstra): 한 노드에서 다른 모든 노드까지의 최단 경로. (음수 가중치 없는 그래프)
  • 플로이드-와샬(Floyd-Warshall): 그래프 내의 모든 노드 간 최단 경로.

 

최소 신장 트리 (Minimum Spanning Tree)

  • 프림(Prim): 하나의 노드에서 시작해서 점차 확장하며 최소 간선 수로 연결 그래프 생성.
  • 크루스칼(Kruskal): 가중치가 가장 낮은 간선부터 선택하며 연결 그래프 생성. (with Union & Find)

 

순서 결정 알고리즘

  • 위상정렬(Topological Sort): 방향성은 있고 사이클이 없는 그래프에서 순서를 결정.

 

 

** 각 알고리즘의 상세한 동작원리와 문제를 하나씩 풀어서 링크로 연결시킬 예정입니다!

'알고리즘' 카테고리의 다른 글

[자료구조] 배열  (0) 2023.07.03