Recent Posts
Notice
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 재귀함수
- 초보개발자
- 개발자
- 알고리즘공부
- 분할정복
- 이석배
- 정렬알고리즘
- 중급알고리즘
- 알고리즘
- 퀵정렬
- 개발자공부
- 챗gpt
- 고급알고리즘
- chatGPT
- Ai
- 양자컴퓨터
- 파이썬
- 시간복잡도
- 백엔드
- 주니어개발자
- 초전도체
- SortingAlgorithm
- 디자인패턴
- 양자역학
- It
- 알고리즘문제
- 양자컴퓨팅
- 프로그래밍
- 인공지능
- 퀀텀컴퓨팅
Archives
- Today
- Total
세상은 넓고 천재는 많다
[중급 알고리즘] 다익스트라 알고리즘 본문
728x90
다익스트라 알고리즘은 그래프 이론에서 가장 짧은 경로를 찾는 데 사용되는 알고리즘 중 하나입니다. 주로 가중치 그래프에서 두 정점 사이의 최단 경로를 찾는 데 적용되며, 음의 가중치가 없는 경우에 최적의 결과를 보장합니다. 이 알고리즘은 네트워크 라우팅, GPS 네비게이션, 그래프 데이터베이스 등에서 활용됩니다.
다익스트라 알고리즘은 아래와 같은 단계로 작동합니다.
- 시작 노드를 선택하고, 시작 노드에서 다른 모든 노드까지의 거리를 무한대로 초기화합니다. 시작 노드까지의 거리는 0으로 설정합니다.
- 시작 노드와 연결된 모든 인접 노드에 대해 시작 노드로부터의 거리를 갱신합니다. 이때 각 간선의 가중치를 고려하여 거리를 계산합니다.
- 아직 방문하지 않은 노드 중에서 가장 거리가 짧은 노드를 선택합니다. 이 노드를 현재 노드로 설정하고 방문 처리합니다.
- 현재 노드와 연결된 노드들에 대해, 현재 노드를 거쳐서 각 노드까지의 거리를 계산하고, 이 거리가 기존 거리보다 짧으면 거리를 갱신합니다.
- 모든 노드를 방문할 때까지 단계 3과 4를 반복합니다.
이제 예시를 통해 다익스트라 알고리즘을 이해해보겠습니다.
아래 그래프에서 A부터 F까지의 최단 경로를 다익스트라 알고리즘을 사용하여 찾아보겠습니다. 간선의 가중치는 편의상 아래와 같이 표시되어 있습니다.
2 3
A ----- B ----- C
| | /
1| |4 / 1
| | /
D ----- E
5
- A에서 시작합니다. A로부터의 거리는 0, 다른 노드는 무한대로 초기화합니다.
- A와 연결된 B와 D를 선택합니다. B로 가는 거리는 2, D로 가는 거리는 1로 갱신합니다.
- 현재 B에서 시작해서 C와 E를 선택합니다. C로 가는 거리는 3, E로 가는 거리는 4로 갱신합니다.
- 현재 D에서 시작해서 E를 선택합니다. E로 가는 거리는 5로 갱신합니다.
- 현재 C에서 시작해서 E를 선택합니다. E로 가는 거리는 4로 기존 값보다 짧으므로 갱신합니다.
- 현재 E에서 시작해서 F를 선택합니다. F로 가는 거리는 5로 갱신합니다.
다익스트라 알고리즘을 마치면 각 노드까지의 최단 거리가 계산됩니다. 위 예시에서 A로부터의 최단 거리는 A(0), B(2), C(3), D(1), E(4), F(5)입니다.
다익스트라 알고리즘의 시간복잡도는 O(V^2)입니다. 하지만 우선순위 큐를 활용하여 O(E log V)로 최적화할 수 있습니다. 이 알고리즘을 이해하면 그래프에서 최단 경로를 찾는 다양한 문제에 활용할 수 있으며, 중급 개발자로서 그래프 이론과 알고리즘의 실제 적용에 대한 이해를 넓힐 수 있습니다.
728x90
'개발자 > 알고리즘[중급]' 카테고리의 다른 글
[중급 알고리즘] 동적 계획법 (0) | 2023.08.22 |
---|---|
[중급 알고리즘] 최소 스패닝 트리 알고리즘 (0) | 2023.08.22 |
[백트레킹 알고리즘] 백트레킹 알고리즘 (0) | 2023.08.02 |
[기수정렬 알고리즘] 배열 내의 정수들을 기수 정렬하여 정렬된 배열을 출력하기 (0) | 2023.08.02 |