플로이드-워셜 알고리즘

Floyd–Warshall algorithm
플로이드-워셜 알고리즘
학급전체최단 경로 문제(가중치 그래프의 경우)
data 구조그래프
최악의 경우 성능
베스트 케이스 성능
평균 성능
최악의 경우 공간의 복잡성

컴퓨터 과학에서 플로이드-워셜 알고리즘(플로이드 알고리즘, 로이-워셜 알고리즘, 로이-플로이드 알고리즘, 또는 WFI 알고리즘이라고도 함)은 양의 또는 음의 에지 가중치를 가진 (부정 [1][2]사이클이 없는) 유도 가중 그래프에서 최단 경로를 찾는 알고리즘입니다.알고리즘을 한 번 실행하면 모든 정점 쌍 사이의 최단 경로 길이(합계 가중치)를 찾을 수 있습니다.경로 자체에 대한 자세한 내용은 반환되지 않지만 알고리즘을 간단히 수정하여 경로를 재구성할 수 있습니다.알고리즘 버전은 가중 그래프에서 R R 또는 (슐제 투표 시스템과 관련하여) 모든 정점 쌍 사이의 가장 넓은 경로의 과도적 닫힘을 찾는 데도 사용할 수 있습니다.

이력 및 명명

Floyd-Warshall 알고리즘은 동적 프로그래밍의 한 예이며 1962년 [3]Robert Floyd에 의해 현재 인식된 형태로 출판되었습니다.그러나 이는 1959년[4] 버나드 로이가 발표한 알고리즘1962년 스티븐[5] 워셜이 그래프[6]과도적 닫힘을 찾기 위해 발표한 알고리즘과 본질적으로 동일하며, 결정론적 유한 자동화를 정규식으로 [7]변환하기 위한 클린 알고리즘(1956년 발표)과 밀접한 관련이 있다.알고리즘의 현대적 공식은 [8]세 개의 중첩된 포루프로서 1962년에 피터 잉거먼에 의해 처음 설명되었다.

알고리즘.

Floyd-Warshall 알고리즘은 각 정점 쌍 사이의 그래프를 통해 가능한 모든 경로를 비교합니다.그래프에 최대 2)의 가장자리가 있을 수 있지만 그래프에서 3 \ 비교로 이를 수행할 수 있으며 모든 가장자리 조합이 테스트됩니다.이는 추정이 최적화될 때까지 두 꼭지점 사이의 최단 경로에 대한 추정을 점진적으로 개선함으로써 이루어집니다.

1부터N까지 가 매겨진 VV G(\ G \displa로 한 최단 반환하는 s r 에 대해 설명합니다. j(는) 세트{, k}({displaystyle 2,\ 정점만 중간 지점으로 사용합니다.이 함수가 주어졌을 때 우리의 목표는 {,, 1 \의 정점을 사용하여 각 i)에서 각 j j까지의 최단 경로를 찾는 것입니다.

각 정점 쌍에 대해 s r t ( , j, ,k )는 중 하나입니다

(1) k k하지 않는 경로({, - 1\{

또는

(2) k i에서 k, k에서 j j로 가는 경로. 둘 다 {중간 정점만을 사용합니다

1displaystyle 1)에서 까지만 사용하는 i i에서j(\로의 최적 경로는 -)에 정의되며, 보다 명확하다면 다음과 같습니다i(\ i에서k j까지 이 경로의 길이는 i i에서k(\ k까지의 최단 경로({ - 1 정점만 사용)와 최단 경로의 연결입니다.k{\k에서j {\ j로의 경로({ - 의 중간 정점만 사용)

w { w { w,j)}가 ii\ j와 j a j 무게인 경우, 다음 공식의 기준으로 할 수 있습니다.

그리고 재귀적인 경우는

r t ( , , -) + r t s h ( , , - )( \ {Path } ( , , k - 1 )+ \ { Path ( k , k , k - ) { Big}} 。

이 공식은 Floyd-Warshall 알고리즘의 핵심입니다.이 알고리즘은 k \ k 1 \ k = 1 \ displaystyle i ,, )의 i ,)에 대해 h ( , , 로 동작합니다.이 프로세스는 k (\ k까지 계속되며, 중간 정점을 사용하여 모든(j 쌍에 대한 최단 경로를 찾았습니다.이 기본 버전의 의사 코드는 다음과 같습니다.

최소 거리별 dist V×V배열 각 가장자리에(무한대)∞으로 초기화되(u, v)은 가장자리의 무게 // 각 꼭지점 v에(u, v)dist[v][v]k1V에서 나는 1에서 Vj1에서 V만약 dist[나는][j]을에서 0←니← w(u, v)dist[u][v] 하니, dist[나는][k]+dist[k][j]dist자.[나는][j] ← dist[i][k] + dist[k][j] 종료:

위의 알고리즘은 아래 왼쪽 그래프에서 실행됩니다.

Floyd-Warshall example.svg

의 k = 0으로 표시된 외부 루프의 첫 번째 재귀 이전에 알려진 경로는 그래프의 단일 에지에 해당합니다.k = 1에서, 정점 1을 통과하는 경로가 발견됩니다. 특히, [2,1,3] 경로가 발견되어 가장자리는 적지만 (무게 면에서) 더 긴 경로 [2,3]을 대체합니다.k = 2에서 정점 {1,2}을(를) 통과하는 경로를 찾습니다.빨간색 및 파란색 상자는 교차로에 2가 있는 이전 반복에서 발견된 두 개의 알려진 경로 [4,2] 및 [2,1,3]에서 경로 [4,2,1,3]이 어떻게 조립되는지를 보여줍니다.패스 [4, 2, 3]는 고려되지 않습니다.[2, 1, 3]은 지금까지 발견된 최단 패스이기 때문입니다.k = 3에서 정점 {1,2,3}을(를) 통과하는 경로를 찾습니다.마지막으로, k = 4에서 모든 최단 경로를 찾습니다.

k의 반복에서의 거리 행렬은 업데이트된 거리를 굵은 글씨로 표시하면 다음과 같다.

k = 0 j
1 2 3 4
i 1 0 −2
2 4 0 3
3 0 2
4 −1 0
k = 1 j
1 2 3 4
i 1 0 −2
2 4 0 2
3 0 2
4 −1 0
k = 2 j
1 2 3 4
i 1 0 −2
2 4 0 2
3 0 2
4 3 −1 1 0
k = 3 j
1 2 3 4
i 1 0 −2 0
2 4 0 2 4
3 0 2
4 3 −1 1 0
k = 4 j
1 2 3 4
i 1 0 −1 −2 0
2 4 0 2 4
3 5 1 0 2
4 3 −1 1 0

마이너스 사이클의 동작

음의 사이클은 에지가 음의 값으로 합한 사이클입니다.ii)에서j(\j)까지의 경로 길이는 임의로 작을 수 있기 때문에 음의 사이클의 일부를 구성하는 i(\ ij(\ j 사이에는 최단 경로가 없습니다.수치적으로 의미 있는 출력을 위해 Floyd-Warshall 알고리즘은 음의 사이클이 없는 것으로 가정합니다.단, 음의 사이클이 있는 경우에는 Floyd-Warshall 알고리즘을 사용하여 검출할 수 있습니다.직관은 다음과 같습니다.

  • Floyd-Warshall 알고리즘은 i {i를 포함하여 모든정점 쌍(,j) 의 경로 길이를 반복적으로 수정합니다.
  • 처음에 경로 길이는 0입니다.
  • 경로 { 길이가 0보다 작은 경우에만 이를 개선할 수 있습니다. 즉, 마이너스 사이클을 나타냅니다.
  • 따라서 알고리즘 후에 ( i) ( i) ( i) (displaystyle에서 ( i ( i로 돌아가는 음의 길이 경로가 존재하는 경우음이 됩니다.

따라서 Floyd-Warshall 알고리즘을 사용하여 의 사이클을 검출하려면 패스 매트릭스의 대각선을 조사할 수 있습니다.음수의 존재는 그래프에 적어도1개의 음의 [9]사이클이 포함되어 있음을 나타냅니다.알고리즘 실행 중에 음의 사이클이 있는 경우 n - a( \ 6displaystyle })\displaystyle \Omega 6^{displaystyle w_max})\displaystyle 에서 음의 최대 절대값입니다.오버플로/언더플로 문제를 방지하려면 알고리즘의 [10]내부 for 루프 내에서 경로 매트릭스의 대각선에 음수가 있는지 확인해야 합니다.분명히 무방향 그래프에서 음의 가장자리는 입사 정점을 포함하는 음의 주기(즉, 닫힌 보행)를 생성한다. 예제 그래프의 모든 모서리를 무방향으로 간주하면, 예를 들어 정점 시퀀스 4 – 2 – 4는 무게 합계가 -2인 주기이다.

경로 재구성

Floyd-Warshall 알고리즘은 일반적으로 모든 정점 쌍 사이의 경로 길이만 제공합니다.간단한 수정으로 두 끝점 정점 사이의 실제 경로를 재구성하는 방법을 만들 수 있습니다.각 정점에서 다른 정점으로 가는 실제 경로를 저장하는 경향이 있을 수 있지만, 이는 필요하지 않으며, 실제로 메모리 측면에서 매우 비용이 많이 듭니다.대신 최단 경로 트리는 ( ) \( V)메모리를 사용하여 ( E) \( )시간 내에 각 노드에 대해 계산할 수 있습니다.이를 통해 연결된 2개의 정점에서 경로를 효율적으로 재구성할 수 있습니다.

유사 코드

distV×({ V \times V무한로 초기화된 최소 거리 배열로 하고 다음으로 V×({V \ V null 프로시저 FloydWarshallWithPathReConstruction()로 초기화된 정점 인덱스의 배열로 합니다(vu).do dist[u] ← w(u, v) // 각 정점대한 모서리(u, v) next[u][v] ← 0 next[v] ← 1에서 V do [v] ← 1에서 V까지 k에 대한 v//1에서 V까지 표준 Floyd-War 구현dist[i][j] ← dist[i][k] + dist[k][j] next[i][j] ← next[i][k]
절차 경로(u, v) next[u][v] = null경우 경로 ← [u]를 반환하고 u u v ← next[u][v] 경로.path.darg(u) 반환 경로

시간 분석

nn V V. 이는 정점의 수입니다. r n 찾으려면 , ,, , , ,, , , , , , , , , , \{}(k ii)와j(\j합니다 2 동작. a h ( , , ) s ( ,) { \ { Path } ( , ) = \ { Cost } ( , ) } s {\ {\ {\ compute compute {\ n \ n 、 h 、 since since since since since since since since since since since s s s s h 、 h 、 h 、 t t t t 、 t t t p h ( , , { ( , , ) h p h( , j, n { ( i ,j , n )2 n is is알고리즘은 (3)\ 입니다

응용 프로그램 및 일반화

Floyd-Warshall 알고리즘을 사용하여 다음과 같은 문제를 해결할 수 있습니다.

  • 유도 그래프의 최단 경로(플로이드 알고리즘).
  • 방향 그래프의 전이적 폐쇄(워셜 알고리즘).Warshall의 알고리즘의 원래 공식에서 그래프는 가중치가 부여되지 않으며 부울 인접 행렬로 표현된다.그런 다음 추가 연산은 논리적 결합(AND)으로 대체되고 최소 연산은 논리적 분리(OR)로 대체됩니다.
  • 유한 오토마톤에 의해 받아들여진 정규 언어를 나타내는 정규 표현 찾기(Kleene 알고리즘, [12]Floyd-Warshall 알고리즘의 밀접하게 관련된 일반화)
  • 실행렬반전(가우스-요르단 알고리즘)
  • 최적의 라우팅이 응용 프로그램에서는 두 정점 사이의 흐름이 최대인 경로를 찾는 데 관심이 있습니다.즉, 위의 의사 코드에서와 같이 최소값을 취하는 대신 최대값을 취하는 것입니다.가장자리 가중치는 흐름의 고정 구속조건을 나타냅니다.경로의 가중치는 병목현상을 나타내므로 위의 추가 조작은 최소 조작으로 대체됩니다.
  • 패스파인더 네트워크의 고속 계산.
  • 가장 넓은 경로/최대 대역폭 경로
  • 차분 바운드 매트릭스(DBM)의 표준 형식 계산
  • 그래프 간의 유사성 계산
  • AND/OR/[14]임계값 그래프의 전이적 폐쇄입니다.

실장

구현은 많은 프로그래밍 언어에 사용할 수 있습니다.

다른 최단 경로 알고리즘과의 비교

Floyd-Warshall 알고리즘은 대부분의 또는 모든 정점 쌍이 가장자리로 연결되는 밀도 그래프의 모든 정점 쌍 사이의 경로를 계산하는 데 적합합니다.음수가 아닌 에지 가중치를 갖는 스파스 그래프의 경우, 파이버ACI를 사용하여 Dijkstra((V + logV OV + V V의 최악의 실행 시간이므로 가능한 각 시작 정점에서 Dijkstra의 알고리즘을 실행함으로써 점근 복잡도를 낮출 수 있다.는 E {\ E 가 V보다 현저히 알고리즘의 O O보다 작습니다. 음의 가장자리가 있지만 음의 주기가 없는 스파스 그래프의 경우 Johnson 알고리즘을 사용할 수 있습니다.반복된 Dijkstra 접근법과 동일한 점근적 실행 시간.

또한 고밀도 그래프에서 모든 쌍의 최단 경로 계산 속도를 높이기 위해 고속 행렬 곱셈을 사용하는 알려진 알고리즘도 있지만, 일반적으로 에지 가중치에 대한 추가 가정(예: 작은 [15][16]정수여야 함)이 있다.또한 실행 시간의 높은 상수 요인 때문에 매우 큰 그래프에 대해 Floyd-Warshall 알고리즘보다 속도를 높일 수 있을 뿐이다.

레퍼런스

  1. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. (1990). Introduction to Algorithms (1st ed.). MIT Press and McGraw-Hill. ISBN 0-262-03141-8. 특히 섹션 26.2, "플로이드-워셜 알고리즘", 페이지 558-565 및 섹션 26.4, "유향 그래프의 경로 문제를 해결하기 위한 일반적인 프레임워크", 페이지 570-576을 참조하십시오.
  2. ^ Kenneth H. Rosen (2003). Discrete Mathematics and Its Applications, 5th Edition. Addison Wesley. ISBN 978-0-07-119881-3.
  3. ^ Floyd, Robert W. (June 1962). "Algorithm 97: Shortest Path". Communications of the ACM. 5 (6): 345. doi:10.1145/367766.368168. S2CID 2003382.
  4. ^ Roy, Bernard (1959). "Transitivité et connexité". C. R. Acad. Sci. Paris (in French). 249: 216–218.
  5. ^ Warshall, Stephen (January 1962). "A theorem on Boolean matrices". Journal of the ACM. 9 (1): 11–12. doi:10.1145/321105.321107. S2CID 33763989.
  6. ^ Weisstein, Eric W. "Floyd-Warshall Algorithm". MathWorld.
  7. ^ Kleene, S. C. (1956). "Representation of events in nerve nets and finite automata". In C. E. Shannon and J. McCarthy (ed.). Automata Studies. Princeton University Press. pp. 3–42.
  8. ^ Ingerman, Peter Z. (November 1962). "Algorithm 141: Path Matrix". Communications of the ACM. 5 (11): 556. doi:10.1145/368996.369016. S2CID 29010500.
  9. ^ Hochbaum, Dorit (2014). "Section 8.9: Floyd-Warshall algorithm for all pairs shortest paths" (PDF). Lecture Notes for IEOR 266: Graph Algorithms and Network Flows. Department of Industrial Engineering and Operations Research, University of California, Berkeley.
  10. ^ Stefan Hougardy (April 2010). "The Floyd–Warshall algorithm on graphs with negative cycles". Information Processing Letters. 110 (8–9): 279–281. doi:10.1016/j.ipl.2010.02.001.
  11. ^ "Free Algorithms Book".
  12. ^ 를 클릭합니다Gross, Jonathan L.; Yellen, Jay (2003), Handbook of Graph Theory, Discrete Mathematics and Its Applications, CRC Press, p. 65, ISBN 9780203490204.
  13. ^ Penaloza, Rafael. "Algebraic Structures for Transitive Closure". CiteSeerX 10.1.1.71.7650. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  14. ^ Gillies, Donald (1993). Scheduling Tasks with AND/OR precedence contraints (PhD Thesis, Appendix B) (PDF) (Report).
  15. ^ 를 클릭합니다Zwick, Uri (May 2002), "All pairs shortest paths using bridging sets and rectangular matrix multiplication", Journal of the ACM, 49 (3): 289–317, arXiv:cs/0008011, doi:10.1145/567112.567114, S2CID 1065901.
  16. ^ 를 클릭합니다Chan, Timothy M. (January 2010), "More algorithms for all-pairs shortest paths in weighted graphs", SIAM Journal on Computing, 39 (5): 2075–2089, CiteSeerX 10.1.1.153.6864, doi:10.1137/08071990x.

외부 링크