floyd 알고리즘 예제

위의 알고리즘은 아래 왼쪽그래프에서 실행됩니다: 따라서 Floyd-Warshall 알고리즘을 사용하여 음의 주기를 감지하기 위해 경로 행렬의 대각선을 검사할 수 있으며 음수의 존재는 그래프에 하나 이상의 것이 포함되어 있음을 나타냅니다. 음의 주기. [9] 수치 문제를 방지하려면 알고리즘의 내부 for 루프 내에서 경로 행렬의 대각선에 음수를 확인해야합니다. [10] 분명히 무방향 그래프에서 음의 가장자리는 인시던트 정점과 관련된 음의 주기(즉, 닫힌 보행)를 만듭니다. 위의 예제 그래프의 모든 가장자리를 지시되지 않은 것으로 간주하면 정점 시퀀스 4 – 2 – 4는 가중치 합계 -2가 있는 주기입니다. 음수 주기는 가장자리가 음수 값으로 합산되는 주기입니다. 음수 주기의 일부를 형성하는 정점 i {displaystyle i} 및 j {displaystyle j}의 모든 정점 쌍 사이에는 가장 짧은 경로가 없습니다. 수치적으로 의미 있는 출력의 경우 Floyd-Warshall 알고리즘은 음의 주기가 없다고 가정합니다. 그럼에도 불구하고, 음의 주기가 있는 경우, 플로이드-워샬 알고리즘을 사용하여 이를 감지할 수 있습니다. 직관은 다음과 같습니다 : 다음은 플로이드 워샬 알고리즘의 구현이다. Floyd-Warshall 알고리즘은 대부분의 또는 모든 정점 쌍이 모서리로 연결되는 조밀한 그래프의 모든 정점 쌍 간의 경로를 계산하는 데 적합합니다. 음수 에지 가중치가 없는 희소 그래프의 경우, 반복되는 Dijkstra (O (@| )의 실행 시간이기 때문에 가능한 각 시작 정점에서 Dijkstra의 알고리즘을 사용하는 것이 좋습니다. E | V | + | V | 2 로그 | V | ) {디스플레이 스타일 O(| 에 || V |+| V|^{2}로그 | V |)} 피보나치 힙을 사용하는 것은 O (| )보다 낫다 V | 3) {디스플레이 스타일 O(| V|^{3}}} 플로이드-워샬 알고리즘의 실행 시간 | E | {디스플레이 스타일 | 에이} |보다 훨씬 작습니다.

V | 2 {디스플레이 스타일 | V |^{2}} . 음의 가장자리가 있지만 음수 사이클이 없는 희소 그래프의 경우 반복되는 Dijkstra 접근 방식과 동일한 점근 변환 실행 시간으로 Johnson의 알고리즘을 사용할 수 있습니다. Floyd-Warshall 알고리즘은 일반적으로 모든 정점 쌍 사이의 패스 길이만 제공합니다. 간단한 수정을 통해 두 끝점 정점 사이의 실제 경로를 재구성하는 메서드를 만들 수 있습니다. 각 정점에서 서로 정점에 실제 경로를 저장하는 경향이 있을 수 있지만 이것은 필요하지 않으며 실제로 메모리 측면에서 비용이 많이 듭니다.

© 2019 A MarketPress.com Theme