본문 바로가기
자료구조

그래프 정의 및 구현 방식 (인접 행렬 & 인접 리스트)

by 까망 하르방 2021. 2. 25.
반응형

그래프는 G(V, E)는 어떤 자료나 개념을 표현하는 정점(vertex)들의 집합 V와 

정점을 연결하는 간선(edge)들의 집합 E로 구성된 자료 구조로

객체들의 상호 관계를 표현하기 위해 고안된 자료 구조입니다.

 

여러 도시들을 연결하는 도로망, 사람들 간의 지인 관계, 웹사이트 간의 링크 관계 등이 

우리 주변에서 찾을 수 있는 연결 구조의 예라고 할 수 있습니다.

여러 객체들이 서로 연결되어 있다는 점에서 그래프는 트리와 별로 다를 것이 없습니다.

 

그래프 표현 

▶ 인접리스트와 인접행렬

메모리 or 시간 사용 특성이 굉장히 다르기 때문에, 적절한 표현 방식 선택

 

인접리스트(adjacency list)

- 각 정점마다 하나의 연결 리스트를 갖는 방식

  |V|개의 연결 리스트에 실제 간선 수만큼의 원소가 들어 있으므로, 

  전체 O(| V | + | E |)의 공간만을 사용

정점이 연결되어 있는지를 알기 위해서 연결 리스트를 일일이 뒤져야 한다.

 

인접 행렬(adjacency matrix)

- 2차원 배열을 이용해 그래프의 간선 정보를 저장 (| V | × | V | 크기의 행렬)

  실제 간선의 개수와 관계없이 항상 O(V2크기의 공간을 사용해서 문제가 될 수 있음.

- 연결정보를 배열 인덱스를 통해서 인접리스트보다 효율적으로 확인 가능

 

사이클 없는 방향 그래프(directed acyclic graph)

줄여서 DAG라고 부르는 이 그래프는 방향 그래프인데, 

한 점에서 출발해 자기 자신으로 돌아오는 경로(사이클)가 존재하지 않는 경우

DAG는 여러 작업들 간의 상호 의존 관계등을 그래프로 표현할 때 흔하게 출현합니다. 

(간선의 방향을 무시할 경우 DAG에는 사이클이 존재할 수 있다.)

 

같이 보면 좋은 내용

그래프 표현 (인접 리스트 / 인접 행렬)

 

그래프 표현 (인접 리스트 / 인접 행렬)

정점 u - v 간 간선 여부 확인 - 인접 리스트는 adList[u]의 처음부터 읽어나가면서 각 원소를 일일이 확인 - 인접 행렬은은 정점 u, v가 주어졌을 때, 단 한 번의 배열의 접근으로 연결 여부 확인 공간

zoosso.tistory.com

DFS (depth-first search, 깊이 우선 탐색)

 

깊이 우선 탐색(depth-first search, DFS)

DFS 그래프의 모든  정점을 방문할 때 최대한 깊숙히 정점을 방문하는 방식입니다. - Stack 이용 즉, 연결된 정점을 따라 계속 순회하다가 갈 곳이 없어지며 바로 이전단계로 가는 백트래킹 방식.

zoosso.tistory.com

- BFS (Breadth-First Search, 너비 우선 탐색)  

 

BFS (Breadth-First Search, 너비 우선 탐색)

BFS 그래프 전체를 탐색하되, 인접한 노드들을 차례대로 방문합니다. Queue 이용 * DFS로 풀리는 문제는 일반적으로 BFS로도 풀 수 있습니다. Process ※ 깊이 우선 탐색과는 달리 너비 우선 탐색에서

zoosso.tistory.com

 

- 다익스트라(Dijkstra)  

 

다익스트라 (Dijkstra)

개념 다익스트라 알고리즘은 Single Source shortest path problem으로 하나의 정점에서 다른 모든 정점까지 최단 경로를 구할 때 주로 사용됩니다. 이때, 간선의 가중치는 only 양수가 전제조건입니다. (

zoosso.tistory.com

벨만-포드 (Bellman-Ford)  

 

벨만-포드 (Bellman-Ford)

개념 가중 유향 그래프에서 최단 경로를 구하는 알고리즘입니다. 벨만 포드 알고리즘은 동작원리는 다익스트라(Dijkstra)와 유사합니다. 차이점은 벨만 포드는 음수 가중치가 존재하는 경우에도

zoosso.tistory.com

 

- 플로이드 와샬 (Floyd Warshall) 

 

플로이드 와샬 (Floyd Warshall)

개념 아래와 같은 가중 그래프에서 최단 경로를 찾는 알고리즘. ex) 정점 ③ → ⑤로 가는 최단 경로는 다음과 같습니다.    경로Path: ③ → ② → ④ → ① → ⑤ 비용Cost:  +4 +1 +2  -4 = 3..

zoosso.tistory.com

최소신장 트리 - 프림(Prim) / 크루스칼(Kruskal)

 

최소신장 트리 - 프림(Prim) / 크루스칼(Kruskal)

최소 신장 트리(MST, Minimum Spanning Tree) ; 사이클을 형성하지 않으면서 모든 간선(Edge)가 최소로 연결된 그래프. ※ 신장 트리(Spanning Tree); 사이클을 형성하지 않지만 모든 노드가 간선(Edge)로 연결.

zoosso.tistory.com

 

 

 

 

반응형

'자료구조' 카테고리의 다른 글

[스택] Stack 이란?  (0) 2021.04.22
우선순위 큐 (Priority Queue)  (0) 2021.03.21
힙(Heap) 시뮬레이션  (0) 2021.02.27
힙(Heap) 자료구조란?  (0) 2021.02.27
그래프 표현 (인접 리스트 / 인접 행렬)  (0) 2021.02.25

댓글