그래프
in CS on Data Structure
그래프 구조
그래프란?
그래프는 정점(vertex)과 간선(edge)으로 구성된 자료구조를 의미한다.
vertex는 정점, edge는 정점과 정점을 연결하는 간선이다.
그래프는 네트워크 모델 즉, 객체와 이에 대한 관계를 나타내는 유연한 방식으로
이해할 수 있다.
특징
• 순환 혹은 비순환 구조를 가진다.
• 루트-노드 개념이 없다.
• 부모-자식 개념이 없다.
• 방향이 있는 그래프와 방향이 없는 그래프가 있다.
• 2개 이상의 경로가 가능하다.(무향/단방향/양방향)
그래프 구현 방법
그래프를 구현하는 방법에는 인접행렬과 인접리스트 방식이 있다.
인접 행렬
2차원 배열로 그래프의 연결 관계를 표현하는 방식
장점
✔ 2차원 배열 안에 모든 정점들의 간선 정보를 담기 때문에 두 점에 대한 정보를 조회할 때
O(1)
의 시간 복잡도면 충분하다.
단점
✔︎ 모든 관계를 저장하므로 노드 개수가 많을수록 메모리가 불필요하게 낭비된다.
인접 리스트
장점
✔︎ 특정한 노드와 연결된 모든 인접 노드를 순회해야 하는 경우에는 인접리스트 방식이
인접행렬방식에 비해 메모리 낭비가 적다.
✔︎ 정점들의 연결정보를 탐색할 때 O(n)의 시간복잡도를 갖는다. (n: 간선의 갯수)
단점
✔︎ 특정한 두 노드가 연결되어 있는지에 대한 정보를 얻는 속도가 느리다.
인접 리스트 방식에서는 연결된 데이터를 하나씩 확인해야 하기 때문이다.