이번 포스팅에서는 데이터 간의 관계에 특화된 자료구조인 그래프에 대해서 이야기해 보겠습니다.
1. 그래프란?
그래프는 관계를 표현하는데 특화된 자료구조로서 데이터 간 연결 상태를 쉽게 보여줍니다.
그래프에서는 각각의 구성 요소를 가리키는 단어가 존재합니다.
그래프의 노드를 정점(vertex), 그 정점을 연결하는 선을 간선(edge)라고 부릅니다.
간선으로 연결된 정점들은 서로 인접한다(adjacent)라고 말합니다.
그리고 인접한 정점들을 가리켜 이웃(neighbor)라고 부릅니다.
그래프에서는 다른 정점과 연결되지 않은 정점이 존재할 수 있습니다.
모든 정점이 연결되어있는 그래프를 가리켜 연결 그래프(connected graph)라고 부릅니다.
2. 방향 그래프
SNS를 예로 들어보면 A라는 사람이 B를 팔로우하고 있더라고 B는 A를 팔로우하지 않은 상태 일 수 있습니다.
이처럼 항상 상호 관계가 아니며 간선이 방향을 가지고 있는 그래프를 방향 그래프(directed graph)라고 합니다.
3. 그래프 의 코드 구현
이제 객체 형태로 그래프 (Undirected Graph)를 구현해 보겠습니다.
class Vertex {
data
// 인접 Vertex 배열
groupOfAdjacentVertices
constructor(data) {
this.data = data
this.groupOfAdjacentVertices = []
}
AddAdjacentVertex(vertex) {
// 상호간 연결 도중 무한 Loop 방지
if (this.groupOfAdjacentVertices.includes(vertex)) return
this.groupOfAdjacentVertices.push(vertex)
// 상호간 간선 연결
vertex.groupOfAdjacentVertices.push(this)
}
}
Vertex 객체에서 다른 Vertex 객체를 연결 할 때에 방향이 없는 그래프이기 때문에 상호 연결을 해주었습니다.
마치며
이번 포스트에서는 그래프에 대해서 알아보았습니다.
실생활에 밀접한 SNS에서 사용되는 자료 구조라 더 흥미롭게 살펴볼 수 있었습니다.
다음 포스트에서는 이제 이렇게 만들어진 그래프를 탐색하는 방법에 대해 알아보도록 하겠습니다.
'Computer Science > 자료구조' 카테고리의 다른 글
그래프 (3) : 가장 짧은 경로 (0) | 2023.04.01 |
---|---|
그래프 (2) : 탐색의 방향? (0) | 2023.03.30 |
트라이 : 텍스트 데이터 특화 트리 (0) | 2023.03.27 |
힙과 우선순위 큐 : 제일 큰 값, 작은 값 (0) | 2023.03.25 |
이진 탐색 트리 : 검색, 삽입, 삭제 모두 O(logN) (0) | 2023.03.24 |