Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- KAKAO
- 웹엑스
- 알고리즘
- 원자성
- 운영체제
- 은행IT
- MSA
- 시큐어코딩가이드
- LeetCode
- BookReview
- 최단경로문제
- cloudnative
- Algorithm
- 대출대환서비스
- 카카오페이
- FAANG
- IT
- microservice
- 간편결제
- AI5
- 삼성페이
- 이분탐색
- 하이브리드업무
- 프로세스상태
- binarysearch
- 생성형AI
- 카카오웹툰
- 핀테크
- CSRF
- 플랫폼수수료
Archives
- Today
- Total
평안하자
[알고리즘] 최단 경로 문제, 다익스트라(Dijkstra) 본문
그래프의 종류와 특성에 따라 각각 최적화된 다양한 최단 경로 알고리즘이 존재한다.
가장 유명한 것이 다익스트라(Dijkstra) 알고리즘이다.
해당 글에서는 다익스트라 알고리즘을 다룬다.
1. 최단 경로 문제란?
- 간선(Edge)의 가중치(Weight)의 합이 최소가 되는 두 정점(Vertex)(또는 노드) 사이의 경로를 찾는 문제
- 지도상의 한 지점에서 다른 지점으로 갈 때 가장 빠른 길을 찾는 것과 비슷하다. 네비게이션 최적 경로 탐색.
- 정점은 교차로, 간선은 길, 가중치는 거리나 시간과 같은 이동 비용에 해당한다.
2. 다익스트라 (Dijkstra) 알고리즘이란?
정의
하나의 시작점으로부터 다른 모든 정점까지의 최단 거리를 구하는 알고리즘
특징
- 항상 노드 주변의 최단 경로만을 택하는 대표적인 그리디(Greedy) 알고리즘 중 하나로, 단순할 뿐만 아니라 실행 속도 또한 빠르다.
- 다익스트라 알고리즘은 노드 주변을 탐색할 때 BFS(너비 우선 탐색)을 이용하는 대표적인 알고리즘이다.
- 가중치가 음수일 경우는 처리할 수 없다.
- 모든 값을 더해서 양수로 변환하거나, 벨만포드 알고리즘 사용
- 최장 거리를 구할 경우 처리할 수 없다.
2-1. 다익스트라 알고리즘 동작 전제
- 다익스트라 알고리즘은 임의의 정점을 출발 집합에 더할 때 그 정점까지의 최단 거리는 계산이 끝났다는 확신을 갖고 더한다.
- 만일 음수로 인해 이후에 더 짧은 경로가 존재한다면 다익스트라 알고리즘의 논리적 기반이 무너지기 때문에 음수는 처리할 수 없다.
- 같은 이유로 최장 거리를 구하는 데에도 다익스트라 알고리즘을 사용할 수 없다.
2-2. 다익스트라 시간복잡도
E는 간선, V는 정점.
우선순위큐를 사용하면 효율적이기 때문에 다익스트라 알고리즘을 구현할 때 우선순위 큐를 접목한 형태를 널리 이용한다.
- 최초 구현에서 시간복잡도는 O(V^2)이었으나, 현재는 너비우선탐색(BFS)시 가장 가까운 순서를 찾을 때 우선순위큐를 이용하면 시간 복잡도는 O((V+E)logV)가 된다.
- 모든 정점이 출발지에서 도달이 가능하다면 최종적으로 O(ElogV)가 된다.
'Data Structure & Algorithm' 카테고리의 다른 글
| [알고리즘] 프로그래머스 - 여행경로 (java) (0) | 2024.03.31 |
|---|---|
| [알고리즘] 2018 KAKAO BLIND 비밀지도 (Java) (0) | 2024.03.30 |
| 트리(Tree)와 이진 트리(Binary Tree) (0) | 2024.03.26 |
| [자료구조] 그래프(Graph) 정리 (0) | 2024.03.08 |
| [2023 KAKAO BLIND RECRUITMENT] 표현 가능한 이진트리 (Java) (0) | 2023.06.25 |