알고리즘

그래프 알고리즘

해은 2021. 1. 9. 17:54

그래프의 정의

: 그래프는 정점(노드)간선(엣지)로 이루어진 자료구조를 의미한다. 또한 간선의 방향 유무에 따라 단방향 그래프무방향 그래프로 나뉜다.

그래프의 표현

그래프를 표현하는 방식에는 크게 연결선 리스트, 인접 행렬 , 인접 리스트 세가지로 나눌 수 있다.  

 

연결선 리스트

[ [0,1], [0,6], [0,8], [1,4], [1,6], [1,9], [2,4], [2,6], [3,4], [3,5], [3,8], [4,5], [4,9], [7,8], [7,9] ]

인접 행렬

[ [0, 1, 0, 0, 0, 0, 1, 0, 1, 0],
  [1, 0, 0, 0, 1, 0, 1, 0, 0, 1],
  [0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
  [0, 0, 0, 0, 1, 1, 0, 0, 1, 0],
  [0, 1, 1, 1, 0, 1, 0, 0, 0, 1],
  [0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
  [1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
  [1, 0, 0, 1, 0, 0, 0, 1, 0, 0],
  [0, 1, 0, 0, 1, 0, 0, 1, 0, 0] ]

인접 리스트

[ [1, 6, 8],
  [0, 4, 6, 9],
  [4, 6],
  [4, 5, 8],
  [1, 2, 3, 5, 9],
  [3, 4],
  [0, 1, 2],
  [8, 9],
  [0, 3, 7],
  [1, 4, 7] ]

 

그래프의 탐색

그래프의 탐색 기법은 크게 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS), 다익스트라(Dijkstra), 플로이드 와샬(Floyd Washall)이 있다.

  너비우선탐색 깊이 우선 탐색 다익스트라 플로이드 와샬
탐색 방식 자신과 연결된 주변 정점부터 탐색해 나감 자신과 연결된 정점을 선택해, 그 정점에서 연결된 모든 정점을 파고들어가며 끝날 때 까지 들어가 탐색 간선에 음의 가중치가 없는 그래프에서, 어느 한 정점에서 각 정점까지 최소 가중치를 갖는 루트 탐색 간선에 양, 음의 가중치가 있는 그래프에서, 모든 정점에 대해 각 정점까지 최소 가중치를 갖는 루트 탐색
특징 깊이가 깊은 그래프에 대해 높은 성능 넓이가 넓은 그래프에 대해 높은 성능 비교적 빠르게 최단경로 탐색 가능 모든 정점에서의 최단 경로와, 양, 음수 값의 모든 가중치에 대해 탐색 가능. 코드가 단순하다.
제약 조건 너비가 넓은 그래프에 대해 낮은 성능 깊이가 깊은 그래프에 대해 낮은 성능 한 정점에 대해서만 가능하며, 음수 가중치는 불가 속도가 느림
이용되는 자료구조 스택 BFS 응용(+최소 힙) 3중 for문
시간 복잡도 인접행렬: O(V^2)
인접리스트: O(V+E)
(V: 정점의 개수, E: 간선의 개수)
일반: O(V^2)
최소 힙 사용: O(E+VlogV)
O(V^3)

 

 

출처

m.blog.naver.com/occidere/220923695595

ko.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs

 

'알고리즘' 카테고리의 다른 글

DP(Dynamic Programming) 알고리즘  (0) 2020.12.20
깊이우선탐색(DFS)와 너비우선탐색(BFS)  (0) 2020.11.24
정렬 알고리즘  (0) 2020.11.17
완전탐색 (Brute-Force)  (0) 2020.10.26
알고리즘 풀 때 참고 할 js 문법들  (0) 2020.05.10