[ 참 조 블 로 그 ]
[자료구조] 그래프(Graph): 인접행렬과 인접리스트
👉🏻 그래프(Graph)란 노드(Node)와 간선(Edge)으로 연결관계를 표현하는 자료구조이다. 노드는 정점(Vertex)라고 불리기도 한다.
velog.io
[ Graph 란? ]
그래프란??
노드(Node) 와 간선(Edge)로 연결관계를 표현하는 자료구조 이다
노드는 정점(Vertex)라고 불리기도 한다
(1) 노드(node)
정점(vertex) 라고도 하며 데이터가 저장되는 그래프의 기본 원소
(2) 간선(edge)
링크라고도 하며 노드 간의 관계
[ 그래프의 종류 ]
[ 그래프의 구현 ]
그래프의 구현 방법에는 두 가지 방법이 있다
(1) 인접 행렬
노드의 개수가 n 이라면 n * n 형태의 2차원 배열로 그래프를 표현하는 것
간단하게 이야기하자면 arr [ i ] [ j ] 라는 배열이 있을 때
1 -> 2 이면 arr [1][2] 는 1이 되는 것이다
자세한 것은 위 사진을 보면 바로 이해할 수 있을 것 이다
[장점]
2차원 배열에 모든 노드들의 간선 정보가 있기 때문에, 두 노드를 연결하는 간선을 조회 할 때 O(1) 의 시간 복잡도를 가진다
[단점]
간선의 수와 무관하게 항상 n^2 크기의 2차원 배열이 필요하므로 메모리가 낭비된다
그래프의 모든 간선의 수를 알아내려면 인접행렬 전체를 확인해야 하므로 O(n^2)의 시간이 소요된다
(2) 인접 리스트(Adjacency List)
그래프의 각 노드에 인접한 노드들을 연결리스트로 표현하는 방법이다
즉, 노드의 개수만큼 인접 리스트가 존재하며, 각각의 인접리스트에는 인접한 노드 정보가 저장된다. 그래프는 각 인접 리스트에 대한 헤드 포인터를 배열로 가진다
* 헤드포인터 : 연결 리스트의 맨 처음 노드를 가리키는 포인터
[ 장 점 ]
존재하는 간선만 관리하므로 보다 메모리 사용이 효율적이다
[ 단 점 ]
두 노드를 연결하는 간선을 조회하거나 노드의 차수를 알기 위해서는 노드의 인접 리스트를 탐색해야 하므로 노드의 차수만큼의 시간이 필요하다
'알고리즘' 카테고리의 다른 글
23. [JAVA] 소수 구하기에 대해서(Math.sqrt란?) (0) | 2022.09.06 |
---|---|
22. [JAVA] 그리디 알고리즘 이란?? (0) | 2022.09.04 |
18. [JAVA] 투 포인터, 슬라이딩 윈도우 (0) | 2022.08.24 |
17. [JAVA] 스택 과 큐(Stack / Queue) (0) | 2022.08.24 |
16. [JAVA] Comparable (0) | 2022.08.17 |