다익스트라 알고리즘으로 최단 경로 찾기: 실전 예제

작성일 :

다익스트라 알고리즘으로 최단 경로 찾기: 실전 예제

다익스트라 알고리즘(Dijkstra's Algorithm)은 그래프 이론에서 가장 널리 사용되는 최단 경로 알고리즘 중 하나입니다. 이 알고리즘은 가중치가 있는 그래프에서 한 정점에서 다른 정점으로 가는 최단 경로를 찾는 문제를 해결합니다. 다음 예제를 통해 이 알고리즘의 원리와 작동 방식을 자세히 살펴봅시다.

다익스트라 알고리즘의 개요

다익스트라 알고리즘은 한 정점을 시작점으로 하여 모든 다른 정점까지의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘의 주요 아이디어는 다음과 같습니다:

  1. 최소 비용을 가진 정점 선택: 시작점에서 비용이 가장 적게 드는 정점을 선택합니다.
  2. 경로 비용 업데이트: 선택한 정점과 인접한 정점들의 경로 비용을 현재 경로 비용을 기준으로 업데이트합니다.
  3. 반복: 모든 정점을 처리할 때까지 위의 단계를 반복합니다.

알고리즘의 세부 단계

다음 단계는 다익스트라 알고리즘의 세부 작동 방식입니다:

  1. 초기화: 시작점에서 모든 정점까지의 거리를 무한대로 설정하고, 시작점의 거리는 0으로 설정합니다. 또한, 시작점을 포함한 집합과 포함되지 않은 집합을 나눕니다.
  2. 정점 선택: 포함되지 않은 집합에서 가장 작은 경로 비용을 가진 정점을 선택하여 포함된 집합에 추가합니다.
  3. 경로 업데이트: 선택한 정점의 인접한 정점들의 경로 비용을 업데이트합니다. 이때, 새로운 경로 비용이 기존 경로 비용보다 작으면 업데이트합니다.
  4. 반복: 모든 정점이 포함된 집합에 추가될 때까지 2번과 3번 단계를 반복합니다.

실전 예제

다음은 간단한 그래프 예제입니다. 이 그래프에서 다익스트라 알고리즘을 실행하여 최단 경로를 찾는 과정을 단계별로 설명하겠습니다:

예제 그래프

   A
  / \
1/   \4
 /     \
B       C
| \     |
3|  \2  |2
|    \  |
D------ E
      3
  • A에서 B로 가는 경로의 비용은 1입니다.
  • A에서 C로 가는 경로의 비용은 4입니다.
  • B에서 D로 가는 경로의 비용은 3입니다.
  • B에서 E로 가는 경로의 비용은 2입니다.
  • C에서 E로 가는 경로의 비용은 2입니다.
  • D에서 E로 가는 경로의 비용은 3입니다.

단계 1: 초기화

모든 정점의 초기 거리를 무한대로 설정하고, 시작점 A의 거리를 0으로 설정합니다:

  • A: 0
  • B: ∞
  • C: ∞
  • D: ∞
  • E: ∞

단계 2: 최소 비용 정점 선택

현재 최소 거리 정점은 A입니다 (0). A를 선택하여 포함된 집합에 추가합니다.

단계 3: 경로 업데이트

A의 인접한 정점인 B와 C의 거리를 업데이트합니다. A에서 B는 1, A에서 C는 4로 업데이트됩니다:

  • A: 0
  • B: 1
  • C: 4
  • D: ∞
  • E: ∞

단계 4: 반복

최소 비용의 정점 B를 선택하여 포함된 집합에 추가합니다. B의 인접한 정점의 경로를 업데이트합니다. B에서 D는 1+3=4, B에서 E는 1+2=3으로 업데이트됩니다:

  • A: 0
  • B: 1
  • C: 4
  • D: 4
  • E: 3

다음으로, 최소 거리 정점 E를 선택하여 포함된 집합에 추가합니다. E에서 D는 3+3=6, E에서 C는 3+2=5만큼의 경로를 업데이트합니다. 하지만 C의 기존 경로가 더 적으므로 업데이트하지 않습니다.

단계 반복

이제, D와 C의 경로가 4로 동일하지만, 먼저 추가된 D를 사용하여 C를 추가합니다. 업데이틉 시도 여부를 확인 해줍니다.

최종 상태:

  • A: 0
  • B: 1
  • C: 4
  • D: 4
  • E: 3

최종 결과

다익스트라 알고리즘을 통해 최단 경로는 아래와 같습니다:

  • A → B: 1
  • A → B → E : 3
  • A → C: 4
  • A → B → D: 4

결론

다익스트라 알고리즘은 그래프에서 최단 경로를 찾는데 매우 유용합니다. 초기화, 최소 비용 정점 선택, 경로 업데이트, 반복이라는 단계를 통해 더 효율적으로 문제를 해결할 수 있습니다. 이 알고리즘의 실제 적용과 개선 방법을 학습하면, 다양한 실전 문제에서도 유용하게 활용할 수 있습니다.