
2025.03.28
WEEK03 :
그래프(vertex, edge, node, arc), BFS, DFS, 위상정렬
개념 정리를 해보자
그래프는 여러 개의 정점(Vertex)과 이들을 연결하는 간선(Edge)으로 이루어진 자료구조입니다.
| 용어 | 의미 |
|---|---|
| Vertex (Node)(정점) | 정점 (ex: 도시, 사람 등) |
| Edge(간선) | 두 정점을 연결하는 선 |
| Directed Edge (Arc) | 방향이 있는 간선 (ex: A → B) |
| Undirected Edge | 방향이 없는 간선 (ex: A — B) |
| Degree(차수) | 한 정점과 연결된 간선의 개수 |
| In-degree | 방향 그래프에서 들어오는 간선 수 |
| Out-degree | 방향 그래프에서 나가는 간선 수 |
| Cycle | 같은 정점으로 다시 돌아오는 경로가 존재하는 경우 |
- 같은 두 정점 사이에 여러 경로가 가능
- 즉, 노드들 사이에 무방향/방향그래프에서 양방향 경로를 가질 수 있다.
- self-loop 뿐 아니라 loop/circuit 모두 가능하다.
- 관계는 방향성만 있을뿐, 위계구조가 없다.
- 그래프는 순환(Cyclic) 혹은 비순환(Acyclic)이다.
- 방향 그래프와 무방향 그래프가 있다.
- 간선의 유무는 그래프에 따라 다르다.
- 노드 간에 간선이 있을 수도, 없을 수도 있음
- 희소 그래프(sparse): 간선 적음
- 밀집 그래프(dense): 간선 많음
- 무방향 그래프 vs 방향 그래프
- 간선의 방향 유무
- 가중치 그래프 : 간선에 비용이나 가중치가 할당되어 있음
- 연결 그래프 vs 비연결 그래프
- 무방향 그래프에서 어떤 정점에서든 다른 모든 정점에 경로가 있냐 없냐
- Cycle vs Acyclic
- 순환가능한가 안한가
- DAG(Directed Acyclic Graphs) : 방향이 있고 순환이 없는 그래프 → 위상정렬 가능
- 완전 그래프
- 그래프에 속해 있는 모든 정점이 직접 연결되어 있는 그래프
- 인접리스트 - 파이썬 딕셔너리 사용 or 이차원 배열 or 링크드 리스트 → 희소 그래프의 경우 (Sparse Graph)
- 인접행렬 - n*n 배열로 생성 → 밀집그래프의 경우 (dense graph)
깊게 깊게 → 재귀 or 스택으로 구현
넓게 넓게 → 큐로 구현
트리는 그래프의 일종이지만, 특별한 조건을 만족해야 함:
| 항목 | 설명 |
|---|---|
| 루트 노드 | 트리의 시작점 (예: A) |
| 자식 노드 | 부모로부터 연결된 노드 |
| 리프 노드 | 자식이 없는 노드 |
| 서브트리 | 트리의 일부분도 트리 |
root → left → right
left → root → right
left → right → root


그래프 알고리즘
최단거리 찾기
- 다익스트라 알고리즘(양수 가중치에서 최단 거리 계산)
- 벨만 - 포드 알고리즘 (음수 가중치 허용/ 최단 거리 계산)
- 플로이드 워셜 알고리즘 (모든쌍의 최단거리 계산)
MST (Minimum Spanning Tree) - 가중치 합이 최소인 Spanning Tree(그래프의 최소 연결부분 그래프(필연적으로 트리 형태가 된다.))을 계산
SCC (Striong Connected Component) 강한 연결 요소 - 방향 그래프의 사이클 끼리 묶기
출처: https://gmlwjd9405.github.io/2018/08/13/data-structure-graph.html 참고