컴퓨터과학/자료구조&알고리즘
[자료구조와 알고리즘] 그래프(Graph) 개념
PureStack
2021. 12. 16. 20:18
그래프 (Graph)
- 선형 자료구조나 트리 자료구조로 표현하기 어려운 多:多 의 관계를 지니는 원소들을 표현하기 위한 자료구조
- 그래프 G
- 객체를 나타내는 정점 Vertex와 객체를 연결하는 간선 edge의 집합
- G = (V, E)
- V : 그래프에 있는 정점들의 집합
- E : 정점을 연결하는 간선들의 집합
- 그래프의 예 : 버스나 지하철 노선도, 인스타그램의 following/follower 관계 지도
그래프의 종류
1. 무방향 그래프 (undirected graph)
- 두 정점을 연결하는 간선의 방향이 없는 그래프
- 정점 Vi와 정점 Vj를 연결하는 간선을 (Vi, Vj)로 표현
- (Vi, Vj)와 (Vj, Vi)는 같은 간선을 의미
- 간선을 나타내는 정점의 쌍에는 순서가 존재하지 않는다.
![](https://user-images.githubusercontent.com/59963677/146351484-08a0d29b-1fe9-4712-98e8-a7a49d02fa32.png)
- V(G) = {A, B, C, D} E(G) = {(A, B), (A, C), (A, D), (B, D), (C, D)}
2. 방향 그래프 (directed graph)
- 간선이 방향을 가지고 있는 그래프
- Vi, Vj를 연결하는 간선 Vi->Vj를 <Vi, Vj>로 표현
- Vi를 꼬리(tail), Vj를 머리(head)라고 한다.
- <Vi, Vj>와 <Vj, Vi>는 서로 다른 간선을 의미
![](https://user-images.githubusercontent.com/59963677/146352763-00db27ac-04b5-4ffc-9a8b-0e25c16f01e7.png)
- V(G) = {A, B, C, D} E(G) = { <A, B>, <A, D>, <B, D>, <C, A>, <D, C> }
3. 완전 그래프 (Complete graph)
- 각 정점에서 다른 모든 정점을 연결하여 가능한 최대의 간선 수를 가진 그래프
- 정점이 n개인 무방향 그래프의 최대 간선 수: n(n-1)/2개
- 정점이 n개인 방향 그래프의 최대 간선 수: n(n-1)개
4. 부분 그래프 (Subgraph)
- 원래의 그래프에서 일부의 정점이나 간선을 제외하여 만든 그래프
- 그래프 G와 그래프 G'와의 관계
- V(G')⊆V(G), E(G')⊆E(G)
5. 가중 그래프 (Weight graph)
- 정점을 연결하는 간선에 가중치(weight)를 할당한 그래프
그래프 관련 용어
- 경로(path) : 정점 Vi로부터 정점 Vj까지 갈 수 있는 길을 순서대로 나열한 것
- 경로의 길이(path length) : 경로 상에 있는 간선의 수
- 단순 경로(simple path) : 경로 상에서 처음과 마지막을 제외한 모든 정점들이 서로 다른 경로
- 사이클(cycle) : 처음과 마지막 정점이 같은 단순 경로 (순환이 가능한 단순 경로)
- DAG (directed acyclic graph) : 방향 그래프이면서 사이클이 없는 그래프
- 연결 그래프
- 서로 다른 모든 쌍의 정점들 사이에 경로가 있는 그래프, 떨어져 있는 정점이 없는 그래프
- 그래프에서 두 정점 Vi에서 Vj까지의 경로가 있으면 정점 Vi와 Vj가 연결되었다고 함
- 트리는 사이클이 없는 연결 그래프이다.
- 간선 (Vi, Vj)
- 두 정점 Vi와 Vj는 인접(adjacent)되어 있다.
- 간선 (Vi, Vj)는 정점 Vi와 Vj에 부속(incident)되어 있다.
- 차수(degree) : 정점에 부속되어 있는 간선의 수
- 방향 그래프의 정점의 차수 = 진입차수 + 진출차수
- 진입차수(in-degree) : 정점을 머리로 하는 간선의 수
- 진출차수(out-degree) : 정점을 꼬리로 하는 간선의 수
- 방향 그래프의 정점의 차수 = 진입차수 + 진출차수