최단 경로 알고리즘 분석 : 익스트라 알고리즘 Floyed, 벨만 - 포드 알고리즘 SPFA;

최단 경로 알고리즘 : 최단 경로 알고리즘은 그래프 이론, 고전적인 알고리즘 문제 연구되고도는 두 개의 노드 (노드 및 구성된 경로) 사이의 최단 경로를 찾는 목적.

: 최단 경로 문제의 시작점 결정 알려진 시작점, 최단 경로 문제. 사용을위한 익스트라의 알고리즘 (단일 소스 최단 경로)

글로벌 최단 경로 문제 : 적합 모든 최단 경로 수치를 찾을 Floyed-Warshall 알고리즘 (다중 소스 최단 경로)

단일 소스 최단 경로 : 기븐 가중 유향 그래프 G = V, E는 각각 에지가 실수 인 방법. 또한, 후방 정점 세트 V, 지정된 소스 다른 모든 정점까지의 최단 경로의 길이로부터 계산하는 소스. 이 수단 우측 도로 각각 길이있다. 이 문제는 대개 단일 소스 최단 경로 문제라고한다;

다 익스트라의 알고리즘 : 다 익스트라 알고리즘을 사용하여 욕심 현재 선택을 해결하는 문제의 최선의 해결책 항상 그 생각, 부정적인 가중치를 처리 할 수 있으며, 단일 소스 최단 경로 문제를 해결하기 위해 사용되는 알고리즘 에만 오른쪽 그림에 긍정적 수 있습니다 ; 알고리즘 S0 처음부터 욕심 전략을 사용하여, [I] (S0) 근처에서 가장 작은 D [I]이 점 I, 방문하지 않은 V를 선택하고, 그리고 난 중간 지점이며, I 통해 업데이트는 점에 도달 할 최단 거리가, 욕심 가장 가까운 한 지점을 찾기 위해 계속 방문하지 않은, 액세스 포인트의 모든 알고리즘이 완료 완료된 후 N 욕심, 출력의 시작과 끝 점 사이의 최단 거리;

  • 초기화 D [S0 = 0, 그렇지 D [I] = INF;
  • 그리하면 N, 다른 점에 시작점 (S0)로부터의 최단 거리를 발견;
  • 욕심 :
    • 최소 방문하지 않은 D [K]를 식별;
    • K는 플래그 V [K]를 방문;
    • K가 브이 케이 D [V]의 다른 쪽을 통해 시작점 (S0)를 업데이트하기 위해, 중간 지점이다 어레이 경로 추적을 업데이트 할 수 [V] = K로부터 최단 기록 전류가 노드;
  • 프림 알고리즘 욕심쟁이 알고리즘의 차이 :
    • 프림 알고리즘 : 마커 세트를 업데이트가 표시 사이의 거리를 설정하지;
    • 다 익스트라 알고리즘 : 소스 업데이트는 도장이 사이의 거리로 설정된다;
  • 다 익스트라의 알고리즘을 사용 힙 최적화 할 수 있습니다 : 힙 최적화, 핵심 익스트라의 알고리즘은 먼저 최소 거리를 찾는 것입니다, 다음 업데이트, 최적화하지 않을 경우, 우리는 사이클을 통해 최소 거리를 찾기 위해 여기에 우리는 최적화에 우선 순위 큐를 사용할 수 있습니다 ; 수 std있다 :: priority_queue 컨테이너 어댑터를 사용할 수있는 C ++, 힙 우선 순위 큐는 일반적으로 구현하는 데 사용됩니다, 힙을 최적화하기 위해 고려 될 수있다;

Floyed 알고리즘 : Floyed 알고리즘과 같은 다수의 소스도 사이의 소정의 가중으로 최단 경로를 찾는 동적 프로그래밍 알고리즘의 개념을 이용하여, 보간 포인트 법으로 알려진 상기 멀티 소스 방법 최단를 얻을 수 있고, 음극을 처리 할 오른쪽 케이스 측 아니라 네거티브 고리; 알고리즘을 동적 프로그래밍을 사용하는 아이디어;

  • 집합 D [I] [J] [K]가 단지 1,2, .. K 후 J 행 I를 나타내는 경우에 이러한 노드, J 행 I 최단 경로. 다음과 같은 두 가지 상황이있을 것입니다 :
    • 이후 시점 k : d [i]는 [J] [K] = D [I] [K] [K-1] + D [K] [J] [K-1];
    • 지점 (K)을 통과하지 않는다 : d가 [I] [J] [K] = D [I] [J] [K-1];
  • 상태 전이 방정식은 : d [i]는 [J] [K] = 분 {D [I] [J] [K-1], D [I] [K] [K-1] + D [K] [J [K-1]}
  • 경계 조건 : d [I] [j]가 [0] 승 = [I] [J], (w [I] [J] 가중치 IJ 가장자리 에지 가중치가 무한대의 부재를 나타내는 나타내고)
  • K가 D가 증가되기 때문에 I] [J]가 저장된 상태 D [I] [J] [K-1], 일차원, 이차원 배열에 의해 감소 ​​될 수있다 :
    • 상태 전이 식 : d [i]는 [J] = {분 D [I] [K] + D [K] [J], (D)를 [I] [J]};
    • 경계 조건 : d [I] [j]가 승 = [I] [J]
    • 열거 K는 K가 J를 I에서 중간 최단 거리를 이용하여 업데이트되고;

벨만 - 포드 알고리즘 : 벨만 포드 알고리즘은 단일 소스 최단 경로 알고리즘이다 익스트라 알고리즘은 상대적으로 음의 가중치 조건에서 처리 될 수 없다 : 부정적인 링, 간단하지만, 시간 복잡도가 높고, 이 있는지 여부를 결정하는데 사용될 수있다 네거티브 루프 , 각 노드의 시작점으로 최단 경로를 업데이트하는 각각의 반복은 상기 반복 N-1 번 경우 (N-1 에지 6 점 사이에 존재), 다시 경로 업데이트 반복 존재하고 네거티브 링이있다;

알고리즘 생각 : 짧은 막대 그래프 중 어느 하나, 둘 부정적인 사이클을 포함하고, 그것을 포함하지 않을 N-1 에지까지 함유 오른쪽 루프. 최단의 뿌리 트리를 구성 할 수있는 최단 경로, 최단가있는 경우 그 다음, 소스 지점들에서 시작하는 노드는 도달 할 수 있습니다. 최단 경로 트리를 만드는 과정이 과정 따라서, 따라서, 거리 S 수준의 루트에 따라, 층이 층 최단 각 점 (이완 동작) 범위를 생성하는 단계 [N] D [N] 및 V의 보조 배열을 필요 모든 D [n]이 값은 n 번째 사이클 루프에서, 업데이트되지 않은 경우,주기 N-1 배와, 상기 기록 트랙 트레이스로의 최단 거리, 상기 에지의 관점에서 고려는, 각각의 에지는 각 반복 트래버스 ,이 n 번째로 업데이트된다 음 링의 존재를 나타내는 경우, 긴 경로를 해결하기 벨만 - 포드 알고리즘이 같은 선택된 최대 업데이트 재귀 관계만큼, 링을 결정 n 및하기 위해 사용될 수있다;

알고리즘 구현 프로세스 :

  • 초기 : DIST [U] = INF] DIST [S] = 0; s는 시작점이고;
  • 재귀 각 에지 (u, v) 이완 동작을 위해, DIST [V] = 분 (DIST [V], DIST [U]는 + [u는 [V] W) (N-1은 완화로서 동작 시간 ) 
  • 마지막으로 재순환 시간, 음극 링이 있는지의 여부를 결정한다;

SPFA 알고리즘 : SPFA (최단의 경로 빠른 알고리즘) 벨만 - 포드 알고리즘이 상술 한 알고리즘의 시간 복잡도가 상대적으로 높고, 벨만 - 포드 알고리즘이 각 재귀 필요한 모든면을 스캔 재귀 N 시간이 필요하지만, 각 슬랙 큐에 대기 행렬하지 않는 큐의 그러므로 사용, 업데이트에서 각 시점; 작업 느슨하게 측의 모든 필요하지 않습니다 만 짧은 휴식 지점에 연결 최신 측면을 찾아야 각 큐에서 촬영 정점, 모든 이웃 노드 휴식, 같은 리턴 포인트로 정점 경우 휴식의 성공은,이 큐가 비어까지 때까지 이러한 작업을 반복, 대기열에, 큐에없는, 경우 회 노드 대기열의 수 보다 n 배보다 부정적인 사이클의 존재를 표시하는 단계; 카운트하는 CNT [N] 배열을 사용할 수있다;

알고리즘 구현 프로세스 :

  • 초기화 : DIS는 [S]가 = 0; DIS는 [I] = INF는, 새롭게 생성 큐 인큐 소스 노드 (S), 부호 대기열 된 s에;
  • 유, 유 플래그를 대기열에서 제거 된 첫번째 팀에서 점을 제거하고, u는 휴식 작업을 v에 모서리 지점에 연결 될 것이다 큐에 여유가 다음 큐에 V 경우 V는 성공하지;
  • 큐가 비워 질 때까지 반복;

시간 복잡도 분석 :

  • Floyed 알고리즘 : 멀티 소스 최단 처리 부하측 찾고, O (N3)의 시간 복잡도를;
  • 다 익스트라 알고리즘 : 단일 소스 최단 추구는, 네거티브 에지를 처리 할 수 있으며, O (N2)의 시간 복잡도를;
  • 벨만 - 포드 알고리즘 : 찾는 단일 소스 최단 처리 부하 우측은 상기 시간 복잡도는 O (NM);
  • SPFA 알고리즘 : 찾는 단일 소스 최단는, 벨만 - 포드 최적화 알고리즘 버전 제외 우측 핸들 수 시간 복잡도 ~ O (NM O (KM)은 K)는 작은 정수이고;

: 달성하기 위해 코드를 참조하십시오 https://github.com/yaowenxu/codes/tree/master/ 최단 경로 알고리즘

최신 상태로 유지, 소스를 표시하시기 바랍니다, 자세한 내용은, 제발 관심 cnblogs.com/xuyaowen; 

참고 :

최단 경로 문제  4 개의 가장 최단 경로 알고리즘은  다 익스트라 알고리즘  플로이드 알고리즘   프림과 익스트라 알고리즘 차이  벨만 - 포드 알고리즘  SPFA 알고리즘 

추천

출처www.cnblogs.com/xuyaowen/p/shortest-path-algos.html