12. 그래프 ADT (Graph ADT)
그래프 ADT는 정점vertex의 집합 V와 간선edge의 집합 E로 이루어진다. 정점은 노드node라고도 표현한다.
각 노드와 간선은 원소, 즉 정보를 저장한다.
간선에는 방향의 유무에 따라 유향 간선directed edge과 무향 간선undirected edge이 있는데, 모든 간선이 유향 간선인 그래프는 유향 그래프라 한다.
그래프 용어
- 간선 a에 연결된 노드를 각각 간선의 끝점이라 한다.
- 노드 V에 연결된 간선 a,b,c를 각각 노드 V에 부착되었다고 한다.
- 간선 a로 연결된 노드 U,V를 서로 인접한 노드라 한다.
- 한 노드 X가 5개의 간선과 연결되어 있다면, 해당 노드의 차수는 5라 한다.
- 어떤 간선 h,i가 각각 노드 V,U를 연결하면, 간선 h,i를 병렬 간선이라 한다.
- 간선 j가 노드 V에서 노드 V로 연결된다면, 루프라 한다.
- 어떤 노드 U에서 T로 가는 간선들을 경로라 한다.
- 이때, 경로 내의 모든 정점과 간선을 한번씩만 방문하면, 단순경로라 한다.
- 어떤 노드 U에서 시작하여 U에서 끝나는 경로를 사이클이라 한다.
그래프의 밀집도
그래프 내에 노드들을 연결하는 간선이 많을 경우 밀집 그래프, 적을 경우 희소 그래프라 한다.
그래프의 밀집도에 따라 시간복잡도 O(n2),O(nm)인 알고리즘의 성능이 변화한다. (n은 노드의 개수, m은 간선의 개수)
밀집 그래프의 경우 O(nm) 알고리즘이 빠르고, 희소 그래프에선 O(n2) 알고리즘이 빠르다.
자유 트리
모든 노드가 연결되어 있고, 사이클이 없는 무향 그래프 T를 자유 트리라 한다.
사이클이 없는 무향 그래프는 숲이라 한다.
스패닝 트리 (신장 트리)
어떤 그래프에서, 부그래프 가운데 트리인 신장 그래프를 신장 트리 혹은 스패닝 트리라 한다.
한 그래프가 트리가 아니라면, 해당 그래프에 대한 여러 신장 트리가 존재한다.
그래프의 구현
그래프의 구현 방법에는 세 가지가 있다.
- 간선 리스트edge list 구조
- 인접 리스트abjacency list 구조
- 인접 행렬abjacency matrix 구조
간선 리스트 구조
노드들을 저장하는 리스트와 간선들을 저장하는 리스트를 따로 만든다.
각 노드는 원소를 담고, 간선들은 시점 노드와 종점 노드의 포인터와 원소를 담는다.
인접 리스트 구조
인접 리스트 구조는, 간선 리스트 구조에 더하여 각 노드가 부착 리스트를 갖는다.
부착 리스트에는 해당 노드에 부착된 간선들의 포인터가 저장된다.
인접 행렬 구조
인접 행렬 구조는 간선 리스트 구조에 더하여 인접 행렬을 갖고, 각 노드는 정수 번호를 부여받는다.
인접 행렬은 n×n크기의 행렬이다. 해당 행렬의 (i,j) 원소에는 i번 노드와 j번 노드 사이의 간선의 포인터가 저장되고, 해당 노드들 사이에 간선이 없을 경우 널이 저장된다.
'학부 수업 > 알고리즘' 카테고리의 다른 글
14. 방향그래프 (Directed Graph) (0) | 2020.11.24 |
---|---|
13. 그래프 순회 (Graph Traversal) (0) | 2020.11.24 |
11. 해시테이블의 충돌 해결 (0) | 2020.11.05 |
10. 해시테이블 (Hash Table) (0) | 2020.11.05 |
9. AVL 트리 (0) | 2020.10.15 |
댓글
이 글 공유하기
다른 글
-
14. 방향그래프 (Directed Graph)
14. 방향그래프 (Directed Graph)
2020.11.24 -
13. 그래프 순회 (Graph Traversal)
13. 그래프 순회 (Graph Traversal)
2020.11.24 -
11. 해시테이블의 충돌 해결
11. 해시테이블의 충돌 해결
2020.11.05 -
10. 해시테이블 (Hash Table)
10. 해시테이블 (Hash Table)
2020.11.05
댓글을 사용할 수 없습니다.