Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

그래프(Graph) 자료구조와 3가지 표현 방법 완벽 정리

그래프란 무엇인가?

그래프(Graph)는 대표적인 비선형(non-linear) 자료구조입니다. 그래프는 데이터를 노드(정점)로 표현하고, 데이터 간의 관계를 간선(Edge)으로 나타냅니다. 하나의 그래프 G는 두 가지 구성 요소를 가지는데, 바로 정점(Vertex)과 간선(Edge)입니다. 정점은 집합 V로, 간선은 집합 E로 표현되며, 따라서 그래프는 일반적으로 G(V, E)와 같이 표기합니다.

아래 예시를 통해 그래프의 개념을 좀 더 구체적으로 살펴보겠습니다.

그래프(Graph) 자료구조와 3가지 표현 방법 완벽 정리

위 그래프에는 5개의 정점과 5개의 간선이 존재하며, 모든 간선은 방향성을 가지고 있습니다. 예를 들어 정점 B와 D를 연결하는 간선을 보면, 시작 정점(source)은 B이고 도착 정점(destination)은 D입니다. 따라서 B에서 D로는 이동할 수 있지만, 반대로 D에서 B로는 직접 이동할 수 없습니다.

그래프는 비선형 구조이며 규칙적인 형태가 없기 때문에, 메모리에 저장하기 위해서는 별도의 표현 방식이 필요합니다. 그래프를 표현하는 대표적인 방법은 다음 세 가지입니다.

  • 인접 행렬(Adjacency Matrix) 표현
  • 간선 리스트(Edge List) 표현
  • 인접 리스트(Adjacency List) 표현

1. 인접 행렬(Adjacency Matrix) 표현

그래프는 인접 행렬을 사용하여 표현할 수 있습니다. 인접 행렬은 0과 1로만 구성된 이진 행렬(binary matrix)이자 정방행렬(square matrix)로, i번째 행에서 j번째 열에 해당하는 위치에 간선이 존재하면 그 값을 1로 표시합니다. 만약 무방향 그래프를 인접 행렬로 표현하면, 행렬은 항상 대각선을 기준으로 대칭(symmetric) 형태가 됩니다.

그래프(Graph) 자료구조와 3가지 표현 방법 완벽 정리

2. 간선 리스트(Edge List) 표현

그래프(Graph) 자료구조와 3가지 표현 방법 완벽 정리

그래프는 1차원 배열을 이용해서도 표현할 수 있으며, 이를 간선 리스트(edge list)라고 부릅니다. 이 표현 방식에서는 각 간선마다 첫 번째 요소에 시작 정점을, 두 번째 요소에 도착 정점을 저장합니다. 위 예시 그래프에는 총 5개의 간선이 존재합니다. 참고로 무방향 그래프를 간선 리스트로 표현할 경우에는 간선 정보가 양방향으로 모두 저장되어야 하므로, 요소의 개수가 두 배가 됩니다.

3. 인접 리스트(Adjacency List) 표현

인접 리스트는 또 다른 그래프 표현 방식으로, 연결 리스트(Linked List)를 기반으로 합니다. 이 방식에서는 각 정점(노드)이 해당 정점과 직접 연결된 인접 정점들의 목록을 가지고 있습니다. 리스트의 끝에는 NULL 값이 연결되어 있어, 해당 리스트가 여기서 끝난다는 것을 알 수 있습니다.

그래프(Graph) 자료구조와 3가지 표현 방법 완벽 정리