여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조
- 자료구조의 그래프는 마치 거미줄처럼 여러 개의 점들이 선으로 이어져 있는 복잡한 네트워크망과 같은 모습을 가진다.
A —> C
B —> A
, B —> C
C —> A
A는 서울에서 B가 있는 부산으로 가려고 한다. C는 대전에서 부산으로 가려고 한다. A는 서울에서 출발하여 대전에서 C를 태워 부산으로 이동하려고 한다.
// [코드] 비가중치 그래프로 나타낸 서울, 대전, 부산 그래프
let isConnected = {
seoul: {
busan: true,
daejeon: true
},
daejeon: {
seoul: true,
busan: true
},
busan: {
seoul: true,
daejeon: true
}
}
console.log(isConnected.seoul.daejeon) // true
console.log(isConnected.daejeon.busan) // true
용어 | 설명 |
---|---|
정점 (vertex) | 노드(node)라고도 하며 데이터가 저장되는 그래프의 기본 원소 |
간선 (edge) | 정점 간의 관계를 나타낸다. (정점을 이어주는 선) |
인접 정점 (adjacent vertex) | 하나의 정점에서 간선에 의해 직접 연결되어 있는 정점 |
가중치 그래프 (weighted Graph) | 연결의 강도(추가적인 정보, ex. 서울-부산으로 가는 거리 등)가 얼마나 되는지 적혀져 있는 그래프 |
비가중치 그래프 (unweighted Graph) | 연결의 강도가 적혀져 있지 않는 그래프 |
무(방)향 그래프 (undirected graph) | 앞서 보았던 내비게이션 예제는 무(방)향 그래프다. 서울에서 부산으로 갈 수 있듯, 반대로 부산에서 서울로 가는 것도 가능 |
단방향(directed) 그래프 | 서울에서 부산을 갈 수 있지만, 부산에서 서울로 가는 것은 불가능. |
진입차수 (in-degree) / 진출차수 (out-degree) | 한 정점에 진입(들어오는 간선)하고 진출(나가는 간선)하는 간선이 몇 개인지를 나타낸다 |
인접 (adjacency) | 두 정점 간에 간선이 직접 이어져 있다면 이 두 정점은 인접한 정점이다. |
자기 루프 (self loop) | 정점에서 진출하는 간선이 곧바로 자기 자신에게 진입하는 경우 자기 루프를 가졌다라고 표현. 다른 정점을 거치지 않는다는 것이 특징 |
사이클 (cycle) | 한 정점에서 출발하여 다시 해당 정점으로 돌아갈 수 있다면 사이클이 있다고 표현. 내비게이션 그래프는 서울 —> 대전 —> 부산 —> 서울 로 이동이 가능하므로, 사이클이 존재하는 그래프다. |