본문 바로가기
자료구조

(191117) 자료구조 - Graph

by 양털의매력 2019. 11. 17.

 

graph.jpg

Graph 자료구조

연결되어 있는 데이터들의 관계를 표현할 수 있는 자료구조

정점(vertex)과 간선(edge)의 집합, root 노드 개념이 없음, 부모-자식 노드 개념이 없음

 

Graph 용어

정점(vertex) : 위치 (node 라고도 부름)

 

간선(edge) : 노드를 연결하는 선을 말함

 

무향 그래프 와 유향 그래프

- 정점과 간선의 연결 관계에 있어서 방향이 없는 것  / 있는 것

 

정점의 차수(degree) : 각 정점에 연결된 간선의 갯수 (무향 기준)

  - Indegree : 유향에서 정점에 들어오는 간선의 갯수

  - Outdegree : 유향에서 정점에서 나가는 간선의 갯수

 

가중치 그래프

- 간선에 가중치 정보를 두어서 구성한 그래프 (네트워크)

 

연결 그래프 와 비연결 그래프

- 무향 그래프에 있는 모든 정점쌍에 대해서 항상 경로가 존재하는 경우 / 특정 정점쌍 사이에 경로가 없음!!

  -> ex) Tree 자료구조 (사이클이 없는 연결 그래프!!)

 

사이클 과 비순환 그래프

- 경로 중에 반복되는 정점이 없고 시작 정점과 종료 정점이 동일한 경우 / 사이클이 없는 그래프

 

Graph의 구현 방법 2가지

1. 인접 행렬

인접 행렬은 정점의 수를 N이라고 했을 때 N^2 헁렬을 만들어 정점과 정점 사이에 간선의 유무를 표현한 것

 

장점

  - 어떤 두 정점 사이에 간선 존재 여부(boolean)을 바로 알 수 있다. O(1)

  - 정점의 차수(degree)를 O(N)안에 알 수 있다 (행 또는 열을 모두 더하면 되므로)

 

단점

  - 어떤 정점에 인접한 정점을 찾으려면 모든 정점을 전부 순회해야한다.

  - 그래프에 존재하는 모든 간선의 수는 O(N^2) 안에 알 수 있다. 정점의 리스트에 실제 간선 갯수 만큼 들어가 있으므로

 

간선이 많이 존재하는 밀집 그래프(dense graph) 표현할 때 좋다 / 정점 갯수가 작을 때 좋다

 

2. 인접 리스트

모든 정점을 인접 리스트에 저장 (각 정점에 인접한 정점들을 리스트로 표시)

 

장점

  - 어떤 노드에 인접한 노드를 쉽게 찾을 수 있다.

  - 그래프에 존재하는 모든 간선의 수는 O(N+E) 안에 알 수 있다.

 

단점

  - 어떤 두 정점 사이가 연결 되어있는지 확인하는데 오래 걸린다. O(N)

 

간선이 많이 없는 희소 그래프(sparse graph) 표현할 때 좋다 / 정점 갯수가 많을 때 좋다 -> 대부분 인접 리스트 사용하여 구현

 

Graph 탐색 방법 2가지 ( O(V+E) )

1. 깊이 우선 탐색 (Depth First Search : DFS)

어떤 한 정점에서 (루트 노드 또는 임의의 노드, 시작 노드)에서 인접한 한 노드를 탐색하고, 다시 그 노드에서 또 인접한 노드를 탐색하는 식으로 계속 탐색하다가 인접한 정점이 없으면 이전 노드로 돌아가서 다시 다른 인접한 노드를 탐색하는 방식

-> 모든 노드를 방문 하고자 하는 경우에 선택

-> stack 을 사용하여 구현!

 

2. 너비 우선 탐색(Breadth First Search : BFS)

어떤 한 정점에서 (루트 노드, 임의노드, 시작 노드)에서 인접한 모든 노드들을 먼저 탐색을 다하고 그 다음 그 인접한 노드들의 또 인접한 모든 노드를 탐색하는 방식

-> 두 노드 사이에 최단 경로를 찾고 싶을때 선택

-> queue를 사용하여 구현!

 

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

(191120) - 자료구조 Hash Table  (0) 2019.11.20
(191118) 자료구조 - 이진 탐색 트리  (0) 2019.11.18
(191117) 자료구조 - Tree  (0) 2019.11.17
(191117) 자료구조 - Linked list  (0) 2019.11.17
(191114) 자료구조 - Stack, Queue  (0) 2019.11.14

댓글