1. 그래프의 개요
- 정점(Vertex)과 간선(Edge)으로 구성된 비선형 자료구조입니다
- 객체 간의 관계를 표현하는데 가장 적합한 자료구조입니다
- 네트워크 모델을 추상화한 자료구조로 다양한 분야에서 활용됩니다
비선형 자료구조
- 비선형 자료구조란 데이터를 순차적으로 저장하지 않는 자료구조를 의미합니다
- 데이터가 계층적이거나 네트워크 형태로 연결된 구조를 표현할 때 사용합니다
- 하나의 데이터 뒤에 여러 개의 데이터가 올 수 있습니다. 따라서 데이터 탐색 시 여러 경로를 따라가야 합니다
- 대표적인 비선형 자료구조로는 그래프, 트리, 힙 등이 있습니다
1.1 그래프의 특징
- 두 정점 사이에 여러 경로가 존재할 수 있습니다
- 순환(Cycle)이 발생할 수 있습니다
- 네트워크 형태의 관계 표현이 가능합니다
- 하나의 그래프는 여러 개의 연결 요소로 구성될 수 있습니다
2. 트리와 그래프 비교
2.1 주요 차이점
| 특성 | 그래프 | 트리 |
|---|---|---|
| 순환 | 가능 | 불가능 |
| 방향성 | 방향 있거나 없을 수 있음 | 부모에서 자식으로의 단방향 |
| 루트 노드 | 존재하지 않음 | 반드시 하나 존재 |
| 부모-자식 관계 | 없음 | 명확히 존재 |
| 노드 간 경로 | 여러 경로 가능 | 유일한 경로 존재 |
| 연결성 | 연결되지 않을 수 있음 | 모든 노드 연결됨 |
3. 그래프의 구성 요소와 종 류
3.1 기본 구성 요소
3.1.1 정점(Vertex)
class Vertex:
def __init__(self, value):
self.value = value
self.edges = []
- 정점은 값을 가지며 간선의 집합을 가집니다
- 값은 정점을 식별하는 데 사용됩니다
3.1.2 간선(Edge)
class Edge:
def __init__(self, from_vertex, to_vertex, weight=None):
self.from_vertex = from_vertex
self.to_vertex = to_vertex
self.weight = weight
- 간선은 두 정점을 연결하며 가중치를 가질 수 있습니다
- 가중치는 두 정점 사이의 거리나 비용을 나타냅니다
3.2 그래프의 종류
3.2.1 무향 그래프(Undirected Graph)
def add_undirected_edge(graph, v1, v2):
graph[v1].append(v2)
graph[v2].append(v1)
- 간선에 방향성이 없는 그래프입니다.
- 두 정점 사이의 연결을 양방향으로 표현합니다.
3.2.2 유향 그래프(Directed Graph)
def add_directed_edge(graph, from_v, to_v):
graph[from_v].append(to_v)
- 간선에 방향성이 있는 그래프입니다.
- 한 정점에서 다른 정점으로의 방향이 존재합니다.
3.2.3 가중 그래프(Weighted Graph)
def add_weighted_edge(graph, from_v, to_v, weight):
graph[from_v].append((to_v, weight))
- 간선에 가중치가 있는 그래프입니다.
- 두 정점 사이의 거리나 비용을 나타내는 가중치를 가집니다.