본문 바로가기

데이크스트라 알고리즘: 최단경로, 알고리즘 예제, 파이썬 총 정리

애플 앤비디아 2023. 8. 21.

데이크스트라 알고리즘은 그래프에서 한 노드에서 다른 노드로 가는 최단경로를 찾는 알고리즘입니다. 에츠허르 데이크스트라가 제안한 이 알고리즘은 다양한 분야에서 활용되며, 특히 네트워크 라우팅 같은 분야에서 중요한 역할을 합니다. 이 글에서는 데이크스트라 알고리즘의 기본 개념, 다익스트라 알고리즘 예제, 그리고 데이크스트라 알고리즘 파이썬 구현에 대해 자세히 알아보겠습니다.

 

 

최단경로

데이크스트라 알고리즘은 가중치가 있는 방향 그래프에서 시작 노드와 종료 노드 사이의 최단경로를 찾는 알고리즘입니다. 이 알고리즘은 다음과 같은 방식으로 작동합니다:

  1. 시작 노드를 설정합니다.
  2. 시작 노드에서 가장 가까운 노드를 찾습니다.
  3. 해당 노드를 방문하고 인접한 노드들의 거리를 업데이트합니다.
  4. 모든 노드를 방문할 때까지 2와 3의 과정을 반복합니다.

이 방식을 통해 시작 노드에서 모든 다른 노드로의 최단 거리를 구할 수 있습니다.

 

 

다익스트라 알고리즘 예제

간단한 예제를 통해 알고리즘의 작동 방식을 이해해봅시다.

예를 들어, A, B, C, D 네 개의 노드가 있고, A에서 B로의 거리는 4, A에서 C로의 거리는 2, B에서 C로의 거리는 5, B에서 D로의 거리는 10, C에서 D로의 거리는 3이라고 가정해봅시다.

데이크스트라 알고리즘을 사용하면 A에서 D까지의 최단 거리는 A -> C -> D 경로를 통해 5가 됩니다.

 

 

데이크스트라 알고리즘 파이썬

파이썬에서 데이크스트라 알고리즘을 구현하는 방법은 다음과 같습니다:

python
import heapq def dijkstra(graph, start): distances = {node: float('infinity') for node in graph} distances[start] = 0 queue = [(0, start)] while queue: current_distance, current_node = heapq.heappop(queue) if distances[current_node] < current_distance: continue for adjacent, weight in graph[current_node].items(): distance = current_distance + weight if distance < distances[adjacent]: distances[adjacent] = distance heapq.heappush(queue, (distance, adjacent)) return distances

이 코드는 주어진 그래프와 시작 노드를 기반으로 최단 거리를 계산합니다.

 

 

요약

데이크스트라 알고리즘은 그래프의 최단 경로를 찾는 데 사용되는 알고리즘입니다. 이 알고리즘은 시작 노드에서 다른 모든 노드로의 최단 거리를 효과적으로 계산할 수 있습니다. 파이썬을 사용하여 간단하게 구현할 수 있으며, 다양한 실제 상황에서 널리 활용됩니다.

 

 


댓글