학기중 잠시 손을 놓고 있었던 알고리즘 문제를 풀다 보니 예전에 풀었고, 또 자료구조 수업을 수강할 때도 들었던 BFS/DFS같은 최단 경로 알고리즘도 기억이 나지 않아서
한번 여러 그래프 알고리즘들을 찾아보고 공부해보려고 한다.
알고리즘 문제에서 서로 다른 객체가 연결되어 있다? 라면 그래프 알고리즘일 가능성이 높다.
그래프는 주로 두가지 방식으로 구현된다.
메모리 공간을 많이 필요로 하는 대신 노드간 간선의 비용을 구하는 시간이 O(1)의 시간복잡도를 가진다.
그래프의 시간 복잡도와 공간 복잡도
그래프를 분석할 때는 기존의 O(N)이용하지 않고 다른 알파벳으로 표현한다.
- V (Vertax)
- 그래프 내에 있는 모든 노드들의 집합
- E (Edge)
- 그래프 안에 있는 모든 간선들의 집합
플로이드 워셜 / 다익스트라 알고리즘 - 추후 수정 예정
그래프 알고리즘의 기본인 DFS/BFS 알고리즘에 대해서 먼저 알아보자.
그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
그래프에서 한 방향으로 탐색을 진행하다가 더 이상 탐색을 진행할 수 없는 상황이 되면, 가장 최근에 방문했던 정점에서 다시 탐색을 진행하는 방법이다.
동작과정은 이렇다.
BFS는 깊이 우선 탐색과는 달리 노드v에 인접한 모든 노드를 방문한 다음
노드 v에 인접한 노드 중 하나를 다시 택하여 다시 너비 우선 탐색을 계속하는 방법이다.
특징 | DFS | BFS |
---|---|---|
자료구조 | 스택, 재귀함수 | 큐 |
탐색 방식 | 깊이 우선 | 너비 우선 |
장점 | 깊고 왼쪽에 있는 경로일 수록 유리 | 노드 수가 적고 깊이가 얇을 때 유리 |