여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조.
그래프는 vertex와 edge로 구성된 한정된 자료구조를 의미한다. vertex는 정점, edge는 정점과 정점을 연결하는 간선이다.
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
서울
, 대전
, 부산
3개의 vertex가 있고, 서울
— 대전
, 대전
— 부산
, 부산
— 서울
의 간선이 있으므로 서로 연결되어있다고 할 수 있다.
서울
⇒ 대전
⇒ 부산
⇒ 서울
으로 이동이 가능하므로 사이클이 존재하는 그래프이다.인접 행렬은 노드를 2차원 배열로 만든것이다. 완성된 배열의 모양은 표 or matrix형식을 하고 있으며 A라는 정점과 B라는 정점이 이어져 있으면 1, 그렇지 않다면 0으로 표시한다.
let matrix = new Array(3).fill(0).map((y) => new Array(3).fill(0));
/*
A B C // A => C // A B C
A [0, 0, 0] // B => A // A [0, 0, 1]
B [0, 0, 0] // B => C // B [1, 0, 1]
C [0, 0, 0] // C => A // C [1, 0, 0]
*/
인접 리스트는 노드를 리스트로 표현한것이다. 주로 정점의 리스트 배열을 만들어 관계를 설정해서 구현한다.
/* 인접 행렬
A B C // A => C // A B C
A [0, 0, 0] // B => A // A [0, 0, 1]
B [0, 0, 0] // B => C // B [1, 0, 1]
C [0, 0, 0] // C => A // C [1, 0, 0]
인접 리스트
A => B (0, 1) // false;
B => A (1, 0) // true;
A => C (0, 2) // true;
B => A => C (1, 0), (0, 2) // true
*/
데이터가 바로 아래에 있는 하나 이상의 데이터에 단방향으로 연결되는 계층적 자료구조
트리는 데이터를 순차적으로 나열시킨 형태인 선형 구조가 아닌, 하나의 데이터 뒤에 여러 개의 데이터가 존재할 수 있는 비 선형구조로 되어 있고, 계층적으로 표현이 되며 아래로만 뻗기 때문에 사이클없는 하나의 연결 그래프다.
class Tree {
constructor(value) {
this.value = value;
this.children = [];
}
insertNode(value) {
const childNode = new Tree(value);
this.children.push(childNode);
}
}
트리는 하나의 루트 노드를 가지고, 루트 노드는 0개 이상의 자식 노드를 가진다. 그 자식 노드 또한 0개 이상의 자식 노드를 가지고, 반복적으로 생성된다.