최단 경로 고속 알고리즘

Shortest path faster algorithm

최단 경로 고속 알고리즘(SPFA)은 가중 방향 그래프에서 단일 소스 최단 경로를 계산하는 Bellman-Ford 알고리즘의 개선입니다.이 알고리즘은 무작위 희소 그래프에서 잘 작동하며 음의 가중치 [1]에지를 포함하는 그래프에 특히 적합합니다.그러나 SPFA의 최악의 경우 복잡성은 Bellman-Ford의 복잡성과 동일하므로 음이 아닌 에지 가중치가 있는 그래프의 경우 Dijkstra 알고리즘이 선호됩니다.SPFA 알고리즘은 에드워드 F에 의해 처음 발표되었습니다. 1959년 무어는 너비 우선 [2]탐색의 일반화로서 SPFA는 무어의 "알고리즘 D"입니다.[3] 1994년에 이 알고리즘을 재발견한 중국 연구자 판딩 an에 의해 "최단 경로 고속 알고리즘(SPFA)"이라는 이름이 주어졌습니다.


알고리즘.

가중 방향 G () {\ G=( 소스 {\이 주어지면 SPFA 알고리듬은 그래프에서s{에서 각 정점 v까지의 경로를 찾습니다.s에서 vv}까지의 최단 경로 길이는 각 vv에 대해 d { d 저장됩니다.

SPFA의 기본 아이디어는 각 정점이 인접한 정점을 완화하기 위한 후보로 사용된다는 점에서 Bellman-Ford 알고리듬과 동일합니다.후자보다 향상된 점은 SPFA가 모든 정점을 맹목적으로 시도하는 대신 후보 정점의 대기열을 유지하고 정점이 완화된 경우에만 대기열에 정점을 추가한다는 것입니다.이 프로세스는 더 이상 정점을 완화할 수 없을 때까지 반복됩니다.

아래는 [4]알고리즘의 유사 코드입니다.서 Q Q 후보 정점의 선입선출 대기열이고 ( w)}는 (){에지 가중치입니다.

유클리드 거리를 기반으로 한 SPFA의 데모입니다.빨간색 선은 (지금까지 관찰된) 가장 짧은 경로 피복입니다.파란색 선은 이완이 발생하는 위치를 나타냅니다. 즉, 소스에서 vv 가는 경로를 제공하는 Q Qu{u}와 합니다.
프로시저 V(G) 2 d(v) := ∞ 3 d(s) := Q가 비어 있지 않은 동안 E(G)의 각 에지(u, v)에 대한 Q 7에 대해 Q 5에 푸시하는 각 정점에 대한 Shortest-Path-Faster-Algorithm(G, s) 1(G, s) 1(d) + w(v) <d(v) d(d) 9(d) +(d(d) +(d) +(d) +(d) +(d) +(d(d) +(d) +(d) +(d) +(d)10 v가 Q없으면 11이 v를 Q에 밀어 넣습니다.

이 알고리즘은 또한 각 방향이 없는 에지를 반대 방향의 두 방향 에지로 대체하여 방향이 없는 그래프에 적용할 수 있습니다.


정확성 증명

우리는 알고리즘이 잘못된 최단 경로 길이를 계산하지 않는다는 것을 증명할 것입니다.

Lemma: 대기열이 비어 있는지 확인할 때마다 현재 완화를 유발할 수 있는 정점이 대기열에 있습니다.
증명: 조건을 확인할 때 두 u{u} 및 w 대해 [ > + uu}가 대기열에 을 보여줍니다.우리는 이미 발생한 루프의 반복 횟수를 유도하여 그렇게 합니다.먼저 루프가 입력되기 전에 이것이 확실히 유지된다는 점에 주목합니다.{\\not이면 이완이 불가능합니다. u {\ u=에서 이완이 가능하며, 루프가 입력되기 직전 대기열에 추가됩니다.자, 루프 안에서 무슨 일이 일어나는지 생각해 보세요.u{u}는 팝업되며, 가능하면 모든 인접 관계를 완화하는 데 사용됩니다.따라서 루프가 된 직후 u 더 이상 이완을 발생시킬 수 없습니다(더 이상 대기열에 있을 필요가 없습니다).그러나 x x 이완으로 인해 일부 다른 정점이 이완을 일으킬 수 있습니다.현재 루프 반복 전에 [] > [] +() {{dist[ +)}와 같은 x {\w(가) 있으면 w w}가 이미 대기열에 .이 조건이 현재 루프 반복 중에 이 되면 불가능한 [ dist 하거나 dist[가 감소하여 w w 완화되었음을 합니다.그러나 w w(가) 된 후 대기열이 아직 없는 경우 대기열에 추가됩니다.
결과:알고리즘은 더 이상의 이완이 불가능한 경우에만 종료됩니다.
증명: 더 이상 완화할 수 없는 경우, 알고리즘은 대기열에서 정점을 계속 제거하지만, 정점은 성공적인 완화에만 추가되기 때문에 대기열에 더 이상 추가되지 않습니다.따라서 대기열이 비어 알고리즘이 종료됩니다.추가 완화가 가능하면 대기열이 비어 있지 않고 알고리즘이 계속 실행됩니다.

소스에서 음의 가중치 주기에 도달할 수 있으면 알고리즘이 종료되지 않습니다.음의 가중치 주기가 존재할 때 이완이 항상 가능하다는 증거는 여기를 참조하십시오.음의 가중치 주기가 없는 그래프에서 더 이상 이완이 불가능할 때 정확한 최단 경로가 계산되었습니다(증명).따라서 음의 가중치 주기가 없는 그래프에서는 알고리즘이 잘못된 최단 경로 [5]길이로 종료되지 않습니다.

러닝타임

실험에 따르면 랜덤 그래프에서 평균 실행 시간은 O {\(이지만, 알고리즘의 최악의 경우 실행 시간은 Bellman-Ford [1][6]알고리즘과 동일한V Δ E) \Displaystyle \Omega( E입니다.

최적화 기법

알고리즘의 성능은 후보 정점이 다른 정점을 완화하는 데 사용되는 순서에 따라 강하게 결정됩니다.실제로 Q Q 우선순위 알고리즘은 Dijkstra의 알고리즘과 매우 유사합니다.그러나 여기서 우선 순위 대기열이 사용되지 않기 때문에 대기열의 품질을 향상시키기 위해 두 가지 기술이 사용되기도 하며, 이는 결과적으로 평균적인 경우 성능을 향상시킵니다(최악의 경우 성능은 향상시키지 않습니다).두 기법 모두 소스에 더 가까운 정점이 먼저 처리되도록 Q Q 요소 순서를 재정렬합니다.따라서 이러한 기술을 구현할 때 Q 더 이상 선입선출 큐가 아니라 일반적인 이중 링크 목록 또는 이중 종단 큐입니다.

소형 라벨 우선(SLF) 기법.11행에서는 v{ v 항상 대기열 끝으로 밀어 넣는 대신 ( { d d(앞{\ {\와) 했습니다d {\ d(가) 작을 대기열 앞에 v{\ v 합니다.이 기법에 대한 유사 코드는 (의 큐 끝에v{ v 후):

프로시저 Small-Label-First(G, Q) if d(back(Q)) < d(front(Q))  다음 u := pop back of Q의 push u를 Q 으로 밀어넣습니다.

LLL(Large Label Last) 기법.라인 11 이후에는 첫 번째 요소가 평균보다 작도록 큐를 업데이트하고 평균보다 큰 요소는 큐의 끝으로 이동합니다.유사 코드는 다음과 같습니다.

프로시저 Large-Label-Last(G, Q) x := 모든 vin Q에 대한 d(v)의 평균 d(front(Q)) > x u : = Q의 pop front에서 Q의 뒤로 푸시업합니다.

레퍼런스

  1. ^ a b 이른바 SPFA 알고리즘 정보
  2. ^ Moore, Edward F. (1959). "The shortest path through a maze". Proceedings of the International Symposium on the Theory of Switching. Harvard University Press. pp. 285–292.
  3. ^ Duan, Fanding (1994), "关于最短路径的SPFA快速算法 [About the SPFA algorithm]", Journal of Southwest Jiaotong University, 29 (2): 207–212
  4. ^ "Algorithm Gym :: Graph Algorithms".
  5. ^ "Shortest Path Faster Algorithm". wcipeg.
  6. ^ "Worst test case for SPFA". Retrieved 2023-05-14.