Graph
그래프 (Graph)
정점(Vertex, Node)과 간선(Edge)으로 이루어진 자료구조
여러 개체(정점)와 그 관계(간선)를 표현
현실 세계의 다양한 관계(도로망, SNS 친구 관계, 컴퓨터 네트워크 등)를 모델링할 때 사용함
그래프의 구성 요소
- 정점(Vertex) : 그래프의 기본 단위 (ex. 사람, 도시, 웹페이지)
- 간선(Edge) : 두 정점을 연결하는 선 (ex. 친구 관계, 도로, 링크)
방향이 없으면 무향 그래프 (Undirected Graph)
방향이 있으면 유향 그래프 (Directed Graph)
- 가중치(Weight) : 간선에 붙는 값 (ex. 거리, 비용, 시간)
그래프의 종류
1. 무방향 그래프 (Undirected Graph)
A-B는 B-A와 동일
친구 관계, 연결망 표현
2. 방향 그래프 (Directed Graph, Digraph)
A→B와 B→A가 다름
팔로우 관계, 웹 링크
3. 가중치 그래프 (Weighted Graph)
간선에 비용(가중치)이 붙음
최단 경로 문제
4. 비가중치 그래프 (Unweighted Graph)
단순히 연결만 있음
5. 사이클 그래프 / 비사이클 그래프
사이클(Cycle) : 한 정점에서 시작해 다시 돌아오는 경로가 있는 경우
그래프의 표현 방법
인접 행렬 (Adjacency Matrix)
- 2차원 배열로 표현
- 정점 i, j가 연결되면 matrix[ i ][ j ] = 1 (또는 가중치 값)
- 장점 : 구현이 간단하다, 두 정점 연결 여부 확인 O(1)
- 단점 : 메모리 낭비 (간선이 적은 희소 그래프에서 비효율적)
인접 리스트 (Adjacency List)
- 각 정점마다 연결된 정점을 리스트로 표현
- 장점 : 메모리 효율적, 특히 희소 그래프에서 유리하다.
- 단점 : 특정 간선 존재 여부 확인은 느리다 (O(V))
그래프 탐색 알고리즘
- DFS (깊이 우선 탐색, Depth First Search)
- 한 경로를 끝까지 탐색 후 다른 경로를 탐색한다.
- 재귀나 스택 사용
2. BFS (너비 우선 탐색, Breadth First Search)
- 시작점에서 가까운 정점(같은 거리 레벨)부터 탐색
- 큐 사용 → 최단 경로 탐색에 활용
동작 원리
DFS
- 자료 구조 : 스택
- 절차
- 정점 방문 → 2. 인접 정점으로 들어감 → 3. 더 갈 곳이 없으면 백트래킹(되돌아오기)
- 간선 분류(유향 그래프) : 트리 / 뒤(Back) / 앞(Forward) / 교차(Cross) 간선을 통해 사이클 유무 등 분석 가능
BFS
- 자료 구조 : 큐
- 절차
- 시작 정점을 큐에 넣고 방문 표시 → 2. 큐에서 하나 꺼내 인접 정점을 차례대로 넣기 → 3. 큐가 빌 때까지 반복
- 결과 : 시작점으로부터의 최단 간선 수를 자연스럽게 계산
참고
https://hongcoding.tistory.com/78
[자료구조] 그래프(Graph) 개념 정리
그래프란? 그래프는 정점(Vertex)과 간선(Edge)으로 이루어진 자료구조이다. 정확히는 정점(Vertex)간의 관계를 표현하는 조직도라고 볼 수 있다. 이러한 면에서 트리는 그래프의 일종인 셈이다. 하지
hongcoding.tistory.com
'Back-end > 자료구조' 카테고리의 다른 글
| Map / Set (0) | 2025.09.10 |
|---|---|
| Stack (0) | 2025.09.09 |
| Vector (0) | 2024.04.18 |
| Collection (List, Set, Map) (0) | 2024.04.17 |
| LinkedList (0) | 2024.04.17 |