📈알고리즘/알고리즘

동적 계획 알고리즘(1)[플로이드 모든 쌍 최단 경로 알고리즘]

하얀성 2023. 4. 13. 10:22

동적 계획 알고리즘은 부분 문제들을 모두 해결한 후, 그 해들을 이용하여 큰 크기의 부분문제들을 해결하여 최종적으로 전체를 해결하는 알고리즘이다.

 

동적 계획 알고리즘은 부분문제들 사이 간에 영향을 미칠 수 있음. 

 

분할 정복 알고리즘은 서로 따로 값들을 계산했다면, 

여기서는 앞선 부분문제의 결과가 다른 부분문제의 계산에 이용될 수 있음.(의존적 관계)

 


<슈도 코드>

 

AllPairsShortest

입력: 2차원 배열 D, 단, D[i,j]=간선 (i,j)의 가중치, 만일 간선(i,j)이 존재하지 않으면 D[i,j]=∞, 모든 i에 대하여 D[i,i] = 0이다.

출력: 모든 쌍 최단 경로의 거리를 저장한 2차원 배열 D

1  for k = 1 to n

2      for i = 1 to n (단, i != k)

3          for j = 1 to n (단, i != k)

4            D[i,j] = min{D[i,k]+D[k,j],D[i,j]}

 

 

모든 점을 경유 가능한 점들로 고려된 모든 쌍 i와 j의 최단 경로의 거리를 찾는 방식.

 

시간 복잡도는 삼중for문이 돌아감으로 인해 O(n^3)


<과정 그려보기>

앞에서 최소값으로서 갱신된 부분들은 2차월 배열 D에 반영된 후 반복문이 계속 돌아감.