목차
1. 그래프란?
그래프는 정점과 간선으로 이루어진 자료구조이다. 그래프는 다음과 같은 특징을 가진다.
- 정점(Vertex): 데이터를 저장하는 공간
- 간선(Edge): 정점과 정점을 연결하는 선
- 방향성: 간선에 방향이 있는 경우 방향 그래프, 없는 경우 무방향 그래프
- 가중치: 간선에 가중치가 있는 경우 가중치 그래프, 없는 경우 비가중치 그래프
2. 그래프의 활용
그래프는 주로 탐색을 위해 사용된다. 여기에서 탐색이란 그래프의 정점(vertex)을 방문하기 위해 간선(edge)을 따라 이동하는 것을 의미한다. 탐색을 통해 그래프의 구조를 파악하거나 특정 정점을 찾는 등의 작업을 수행할 수 있다. 대표적인 예시로는 미로 찾기, 최단 경로 찾기, 네트워크 경로 찾기 등이 있다.
그래프 탐색 알고리즘에는 다음과 같은 것들이 있다.
- 깊이 우선 탐색(DFS, Depth First Search)
- 너비 우선 탐색(BFS, Breadth First Search)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 벨만-포드 알고리즘(Bellman-Ford Algorithm)
- …
3. 그래프 표현 방법
대표적으로 그래프는 대표적으로 다음의 두 가지 방법으로 표현할 수 있다
- 인접 행렬(Adjacency Matrix)
- 인접 리스트(Adjacency List)
3.1 인접 행렬(Adjacency Matrix)
인접 행렬은 2차원 배열로 그래프를 표현하는 방법이다. 인접 행렬은 다음과 같은 특징을 가진다.
- 정점의 개수가
V
일 때,V x V
크기의 2차원 배열이 필요하다. - 정점
u
와 정점v
가 연결되어 있으면matrix[u][v] = 1
, 연결되어 있지 않으면matrix[u][v] = 0
이다. - 가중치 그래프의 경우
matrix[u][v] = w
로 표현한다.
matrix = [[1, 0, 0, 1, 0],
[0, 1, 1, 0, 0],
[0, 1, 1, 1, 1],
[1, 0, 1, 1, 0],
[0, 0, 1, 0, 1]]
인접 행렬은 다음과 같은 장단점을 가진다.
- 장점
- 두 정점이 연결되어 있는지 확인하는데
O(1)
의 시간 복잡도가 소요된다. - 두 정점 사이의 간선을 찾는데 유용하다.
- 가중치 그래프의 경우 간선의 가중치를 쉽게 확인할 수 있다.
- 무방향 그래프의 경우 대각선을 기준으로 대칭성을 가진다.
- 행렬의 곱셈을 이용해 그래프의 연결 여부를 확인할 수 있다.
- …
- 두 정점이 연결되어 있는지 확인하는데
- 단점
- 정점의 개수가 많을 경우 메모리 낭비가 심하다.
- 특정 정점과 연결된 간선을 찾는데
O(V)
의 시간 복잡도가 소요된다. - 희소 그래프(Sparse Graph)의 경우 메모리 낭비가 심하다.
- …
인접 행렬은 정점의 개수가 적고 간선의 개수가 많은 밀집 그래프(Dense Graph)의 경우에 적합하다.
3.2 인접 리스트(Adjacency List)
인접 리스트는 리스트를 이용해 그래프를 표현하는 방법이다. 인접 리스트는 다음과 같은 특징을 가진다.
- 정점의 개수가
V
일 때,V
개의 리스트가 필요하다. - 각 리스트는 해당 정점과 연결된 정점들을 저장한다.
- 가중치 그래프의 경우 각 리스트의 원소는 정점과 가중치를 저장한다.
adj_list = [[(3, 1)],
[(1, 1), (2, 1)],
[(1, 1), (2, 1), (3, 1), (4, 1)],
[(0, 1), (2, 1), (3, 1)],
[(2, 1), (4, 1)]]
인접 리스트는 다음과 같은 장단점을 가진다.
- 장점
- 메모리 사용량이 적다.
- 특정 정점과 연결된 간선을 찾는데
O(E)
의 시간 복잡도가 소요된다. - 희소 그래프(Sparse Graph)의 경우 메모리 사용량이 적다.
- …
- 단점
- 두 정점이 연결되어 있는지 확인하는데
O(V)
의 시간 복잡도가 소요된다. - 두 정점 사이의 간선을 찾는데 비효율적이다.
- 가중치 그래프의 경우 간선의 가중치를 확인하기 어렵다.
- …
- 두 정점이 연결되어 있는지 확인하는데
인접 리스트는 정점의 개수가 많고 간선의 개수가 적은 희소 그래프(Sparse Graph)의 경우에 적합하다.
Reference
2024-05-10