벨만포드 알고리즘 예제

August 2, 2019 at 1:29 pm

이렇게하려면, 그는 올바른 순서로 가장자리를보고있다. 이 순서는 찾기 쉽지 않다 – 그것을 계산하는 것은 벨만 포드 알고리즘 자체와 같은 시간이 걸립니다. 전문가가 작성한 고급 알고리즘 코스에서 자세히 알아보십시오. 이 섹션에서는 그래프에 시작 노드에서 도달할 수 있는 음수 원이 없는 경우 Bellman-Ford 알고리즘이 항상 올바른 결과를 반환한다는 것을 증명합니다. A.distance>S.distance+weight(S,A), text{if}A.distance = S.distance + weight(S, A), A.distance>S.distance+weight(S,A), 두 번째 부분의 경우, 대부분의 i 가장자리에서 소스에서 가장 짧은 경로 P(하나 이상있을 수 있음)를 고려하십시오. v가 이 경로에서 u 앞에 있는 마지막 정점이 되게 합니다. 그런 다음 소스에서 v로의 경로 부분은 소스에서 v까지의 가장 짧은 경로이며, 그렇지 않은 경우 대부분의 i-1 가장자리에서 소스에서 v까지의 일부 엄격하게 짧은 경로가 있어야하므로 가장자리 uv를 이에 더할 수 있습니다. 경로는 P보다 엄격하게 짧은 대부분의 i 가장자리가 있는 경로를 얻을 수 있습니다. 유도 가정에 따르면 i−1 반복 후의 v.distance는 소스에서 v까지 이 경로의 길이가 가장 길다. 따라서 uv.weight + v.distance는 P의 길이가 가장 큽입니다. ith 반복에서 u.distance는 uv.weight + v.distance와 비교하여 uv.weight + v.distance가 작으면 동일하게 설정됩니다. 따라서 i 반복 후 u.distance는 P의 길이, 즉 소스에서 가장 짧은 경로의 길이로 대부분의 i 가장자리를 사용합니다.

2단계를 사용하여 모든 가장자리를 다시 살펴보면 VVV의 모든 vvv, v.distance=거리(s,v)v.distance = 거리(s, v)v.distance=거리(s, v)v.distance=거리(s,v)v.v.v.v.를 볼 수 있습니다. Bellman-Ford는 v.distance>u.distance+weight(u,v)v.distance gt u.distance + 중량(u,v)v.distance>u.distance+weight(u,v)의 경우 음수 주기만 보고하므로 음의 중량 주기에 대한 잘못된 보고가 있을 수 없습니다. 이 설정에서 Bellman-Ford 알고리즘의 주요 단점은 다음과 같습니다. 야구장까지의 거리는 20마일이라고 가정해 봅시다. 그러나, 나는 경기장 바로 앞 코너까지의 거리가 10 마일이라는 것을 알고 있으며, 구석에서 경기장까지의 거리는 1 마일이라는 것을 알고 있습니다. 분명히, 경기장까지의 거리는 최대 11 마일입니다. 그래서, 나는 그것을 반영하기 위해 내 믿음을 업데이트 할 수 있습니다. 그것은 휴식의 한 주기, 그리고 그것은 짧은 경로 발견 될 때까지 반복해서 이루어집니다.

야구 게임 네거티브 에지 가중치에 대한 경로의 그래픽 표현은 그래프의 다양한 응용 프로그램에서 발견되므로이 알고리즘의 유용성이 있습니다. [3] 그래프에 소스에서 도달할 수 있는 “음수 주기”(즉, 가장자리가 음수 값으로 합산되는 주기)가 포함되어 있으면 가장 저렴한 경로가 없습니다. 이러한 경우 Bellman-Ford 알고리즘은 음의 주기를 감지하고 보고할 수 있습니다. [1] [4] 예제에서 볼 수 있듯이: 한 단계 후 알고리즘이 모든 거리를 올바르게 결정한 후 왼쪽의 순서를 합리적으로 정렬합니다. 오른쪽에 있는 경우는 그렇지 않습니다. 이것은 구현이 아닌 의사 코드로 작성된 Bellman-Ford에 대한 높은 수준의 설명입니다. 그런 다음 알고리즘의 n-1 단계(노드 수보다 한 단계 적은 단계)를 수행합니다. 각 단계에서 그래프의 모든 가장자리가 확인되고 대상 노드의 거리 값이 변경될 수 있습니다. 새 값의 검사 및 할당을 한 단계로 해석할 수 있으므로 각 단계에서 m 단계가 있습니다.