[알고리즘] 최단 경로: 다익스트라(Dijkstra) 알고리즘

2024. 9. 2. 14:46·CS/알고리즘

0. 최단 경로

최단 경로
간선의 가중치가 있는 그래프에서 두 정점 사이의 경로들 중에 간선의 가중치의 합이 최소인 경로
  • 하나의 시작 정점에서 끝 정점까지의 최단 경로
    • 다익스트라(Dijkstra) 알고리즘
      • 음의 가중치를 허용하지 않음
    • 벨만-포드(Bellman-Ford) 알고리즘
      • 음의 가중치 허용
  • 모든 정점들에 대한 최단 경로
    • 플로이드-워셜(Floyd-Warshall) 알고리즘

이번에는 이 중에서 다익스트라( Dijkstra) 알고리즘을 알아본다.

1. 다익스트라(Dijkstra) 알고리즘

시작 정점에서 다른 모든 정점으로의 최단 경로를 구하는 알고리즘이다.

시작 정점에서의 거리가 최소인 정점을 선택해 나가면서 최단 경로를 구하는 방식이다.

그리디 기법을 사용한 알고리즘으로 정점 중심 그래프로 표현한다.

프림(Prim) 알고리즘과 유사하다.

1-1. 슈도 코드

s: 시작 정점, A: 인접 행렬, D: 시작 정점에서의 거리
V: 정점 집합, U: 선택된 정점 집합

Dijkstra(s, A, D)
	U = {s};
    
    For 모든 정점 v
    	D[v] <- A[s][v]
        
    While U != V
    	D[w]가 최소인 정점 w ∈ V-U를 선택
        U <- U ∪ {w}
        For w에 인접한 모든 미방문 정점 v
        	D[v] <- min(D[v], D[w] + A[w][v])

2. 구현

다익스트라 알고리즘은 방문 처리용 배열이 없어도 문제없이 동작한다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'CS/알고리즘' 카테고리의 다른 글
  • [알고리즘] 동적 계획법(Dynamic Programming): 0/1 Knapsack
  • [알고리즘] 동적 계획법(Dynamic Programming): 메모이제이션(memoization)
  • [알고리즘] 최소 신장 트리(MST) - Kruskal, Prim 알고리즘
  • [알고리즘] 서로소 집합(Disjoint-set): Union-Find Algorithm
Dreaming-J
Dreaming-J
개발자로 성장해가는 과정을 기록하기 위한 공간
    반응형
  • Dreaming-J
    꿈꾸는 개발 공간
    Dreaming-J
  • 전체
    오늘
    어제
    • 카테고리 (46)
      • Infra (2)
      • CS (25)
        • 네트워크 (3)
        • 운영체제 (3)
        • 자료구조 (4)
        • 알고리즘 (15)
      • JAVA (10)
        • IntelliJ (1)
        • Stream (2)
        • String (4)
        • Map (1)
        • 기타 (1)
      • Git·Github (7)
      • 독서 (2)
        • 객체지향 설계 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    조합
    순열
    GitLab
    집합
    disjoint
    Prim
    플로이드-워샬
    java
    string
    0/1
    stream
    Git
    워셜
    dp
    다익스트라
    워샬
    정렬
    그래프
    Dijkstra
    자료구조
    탐색
    github
    동적 계획법
    코딩테스트
    Kruskal
    Binary search
    0/1 knapsack
    독서
    sort
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Dreaming-J
[알고리즘] 최단 경로: 다익스트라(Dijkstra) 알고리즘
상단으로

티스토리툴바