플로이드-워샬 알고리즘

    플로이드-워샬 알고리즘

    시간복잡도 O(N^3)

    정점에서 다른 정점까지 최단거리를 구하는 알고리즘.

    다익스트라 알고리즘은  한 정점에서 다른 정점까지 최단거리를 구하는 알고리즘이라면

    플로이드-워샬 알고리즘은 모든 정점을 다른정점과 최단거리를 구해주는 알고리즘이다.

     

    방법

    꼭지점 k를 중간 노드로 삼아서 모든 그래프가 k를 지나가는 방법과 바로가는 방법중 더 작은 값을 새로 등록한다.

     

    위와같이 있을때 k가 3이라고 가정하면 1->4와 1->3->4로 나눠보고 더 작은값인 1->4의 4를 채택해서 새로 등록한다.

    모든 k에 대해서 반복하고 모든 2차원 그래프를 탐색하니 O(N^3)의 시간복잡도가 된다.

     

     

     

    코드

    for k in range(N):
      for i in range(N):
        for j in range(N):
          arr[i][j] = min(arr[i][j], arr[i][k] + arr[k][j])

     

     

     

     

    참고한 사이트

    https://chanhuiseok.github.io/posts/algo-50/

     

    알고리즘 - 플로이드-워셜(Floyd-Warshall) 알고리즘

    컴퓨터/IT/알고리즘 정리 블로그

    chanhuiseok.github.io

    https://www.acmicpc.net/problem/17182

     

    17182번: 우주 탐사선

    우주 탐사선 ana호는 어떤 행성계를 탐사하기 위해 발사된다. 모든 행성을 탐사하는데 걸리는 최소 시간을 계산하려 한다. 입력으로는 ana호가 탐색할 행성의 개수와 ana호가 발사되는 행성의 위

    www.acmicpc.net

    이 문제로 처음 접했다.

    '백준 > 이론_python' 카테고리의 다른 글

    문자열 뒤집기 python  (0) 2023.04.11
    나머지 분배법칙(모듈러 연산)  (0) 2023.02.11
    백준의 long과 int의 차이  (0) 2023.02.11
    비트 마스킹 C++  (0) 2023.01.17
    분할 정복 알고리즘 python  (0) 2023.01.16

    댓글