접근, 삽입, 삭제, 검색의 '시간복잡도'와 '공간 복잡도'
노드(정점)과 간선(노드와 노드를 연결하는)으로 구성되어있다.
무방향 그래프: n(n-1)/2
방향 그래프: n(n-1)
진입차수: 외부에서 노드로 향하는 간선의 수
진출차수: 노드에서 외부로 향하는 간선의 수
그래프의 연결 관계를 이차원 배열로 나타낸 방식
그래프에 간선이 많이 존재하는 밀집 그래프에 용이
간선의 수와 무관하게 항상 n^2개의 메모리 공간이 필요
adj[i][j]: 노드 i에서 노드 j로 가는 간선이 있으면 1, 아니면 0
각각의 노드에 인접한 노드들을 리스트로 표시하는 방식
배열이나 연결 리스트로 구현 가능
연결된 간선의 정보만을 저장한다.
인접 행렬 | 인접리스트 | |
---|---|---|
장점 | 구현이 쉽다. 두 노드의 연결여부를 확인하는 시간이 짧다.(O(1)) 간선의 추가와 삭제가 빈번히 일어나는 경우에 효율적이다. | 정점의 추가 및 삭제가 빈번히 일어나는 경우 효율적이다. 간선의 정보만을 저장하여 공간 효율성이 우수하다.(O(E)) |
단점 | 노드에 연결된 모든 노드들을 조회할 때 시간이(O(V)) 오래 걸린다. | 각 노드들의 연결 여부 확인이 오래 걸린다. (O(V)) |
nodes = {
0: [1,2],
1: [0],
2: [0]
}
노드로 구성된 계층적 자료구조
루트 노드의 child 의 child 에 또 child 추가...
노드(node) 트리의 구성요소
루트(root) 트리 최상위의 노드
depth 루트를 기준으로, 다른 노드로 접근하기 위한 거리
edge 노드와 노드를 잇는 선
leaf 자식이 없는 노드
sibling 같은 부모를 가지면서 같은 depth에 존재하는 노드들의 관계
모든 노드가 최대 2개의 자식만 갖는 트리
노드의 값이 정렬 방법에 따라 순서가 존재
노드의 왼쪽 서브트리에는 노드의 값보다 작은 값이, 오른쪽 서브트리에는 노드의 값보다 같거나 큰 값이 존재
각 내부 노드가 두 개의 자식 노드를 갖는 트리
홀수 개의 자식 노드를 가질 수 없다.
부모, 왼쪽 자식, 오른쪽 자식 순으로 채워지는 트리
마지막 레벨을 제외하고 모든 노드가 채워져있어야한다.
마지막 레벨의 노드도 왼쪽부터 채워져야한다.
모든 레벨이 가득 채워져 있는 트리
모든 리프 노드의 레벨이 동일하다.
this.nodes[node] = this.nodes[node] || [];
두 노드 사이에 간선 추가
- 첫번째 노드(fromNode)와 두 번째 노드(toNode)를 매개변수로 받는다.
- fromNode가 인접한 노드들을 모아둔 배열에 toNode를 넣는다.
- toNode가 인접한 노드들을 모아둔 배열에 fromNode 를 넣는다.
노드 삭제
- 매개변수는 삭제하려는 노드
2
if (this.nodes[node]) {
delete this.nodes[node];
}