Bellman-Ford 알고리즘-왜 가장자리가 잘못된 순서로 업데이트 될 수 있습니까?


14

벨만 - 포드 알고리즘이 소스에서 최단 경로 결정 다른 정점을. 초기에 와 다른 모든 정점 사이 거리는 로 설정됩니다 . 그런 다음 에서 각 정점 까지 최단 경로 가 계산됩니다. 이것은 반복 에 대해 계속됩니다 . 내 질문은 :sss|V|1

  • 반복 이 필요한 이유는 무엇 입니까?|V|1
  • 가장자리를 다른 순서로 확인하면 문제가됩니까?
    먼저 가장자리 1,2,3을 확인하고 두 번째 반복에서는 2,3,1을 확인하십시오.

MIT 교수 Eric은 순서가 중요하지 않다고 말했지만 혼란 합니다. 값이 모서리 에 의존 하지만 이 이후 에 업데이트되면 알고리즘이 모서리 기반으로 노드를 잘못 업데이트하지 않습니까?x2x1x1x2


어떤 구현을 고려하십니까? 다이나믹 프로그래밍은 분명히 질서에 문제가 없다. 다른 사람들에게는 사소하지 않을 수 있습니다.
Raphael

답변:


15

에서 t , s , v 1 , v 2 , , v k , t 까지 최단 경로를 고려하십시오 . 이 경로는 최대 | V | 우리가 음의 가중치 사이클이 없다면, 가장 짧은 경로에서 정점을 반복하는 것은 항상 나쁜 생각이기 때문에 (또는 적어도 정점을 반복하지 않는 가장 짧은 경로가 있기 때문에) 1 모서리.sts,v1,v2,,vk,t|V|1

라운드에서, 우리는 가장자리 알고 의 거리 추정치 있도록 완화 될 것이다 V 1 이 라운드 후 올바른 것입니다. 우리는 이 시점에서 v 1 이 무엇인지 모릅니다 . 그러나 모든 모서리를 이완 시켰으므로이 영역도 완화해야합니다. 라운드 2에서, 우리 는 어느 시점에서 휴식을 취합니다 ( v 1 , v 2 ) . 우리는 여전히 v 1 또는 v 2 가 무엇인지 알지 못하지만 거리 추정이 정확하다는 것을 알고 있습니다.(s,v1)v1v1(v1,v2)v1v2

이 반복 약간 라운드 후에 , 우리는 한 편안 ( 브이 K , t ) 이후에 대한 거리 추정치, t는 정확하다. 우리는 전체 알고리즘이 끝날 때까지 k 가 무엇인지 알지 못하지만 (무게 가중치 사이클이 없다고 가정) 어느 시점에서 일어날 것이라는 것을 알고 있습니다.k+1(vk,t)tk

따라서 중요한 관측은 라운드 후 가장 짧은 경로 의 i 번째 노드의 거리 추정값이 올바른 값으로 설정되어야한다는 것입니다. 경로가 최대로 | V | 1 모서리, | V | 1 라운드는이 최단 경로를 찾기에 충분합니다. 경우 | V | 라운드는 여전히 무언가를 바꾼 다음 이상한 일이 벌어지고 있습니다. 모든 경로는 이미 최종 값에 '정착'되어야하므로 음의 무게 사이클이 존재해야합니다.ii|V|1|V|1|V|


나는 여기에 약간의 의심이있다. 나는 | v | -1이 가장 짧은 경우의 라운드 수 이후 가장 짧은 경로가 s에서 t로 계산된다고 믿는다. 정점 s, v1, v2..vn, t가 있다고 가정하자. 가장자리는 (s, v1), (v1, v2) .. (vn, t)의 순서로 선택됩니다. 그런 다음 단일 반복 자체에서 s에서 t까지의 최단 경로를 갖게됩니다. 실용적인 용어 우리는 가장자리의 순서를 알지 못하므로 | v | -1 라운드입니다.
whokares

1
@whokares : 그렇습니다, 당신은 운이 좋을 것이고 첫 라운드에서 가장 짧은 길을 찾을 수 있습니다. 마지막 라운드까지 발견 한 값이 실제로 가장 짧은 경로인지 확실하지 않지만 그럴 수 있습니다. Dijkstra의 알고리즘은 기본적으로이 문제를 발생시킵니다. 모든 모서리에 음이 아닌 가중치가있는 경우 Dijkstra의 알고리즘에 사용 된 우선 순위 대기열은 모서리를 이완해야하는 순서를 '예측'하여 첫 번째 이완 라운드에서 가장 짧은 경로를 모두 찾습니다.
Alex ten Brink

자료 중 하나에서 슬라이드 6으로 언급 : 이완 순서를 잘못 선택하면 기하 급수적으로 많은 이완이 발생할 수 있습니다. <br> 슬라이드 8 : 가장자리 이완의 "스마트 한"순서 <br>
whokares

각 반복에서 모서리 순서에 관계없이 가장 짧은 경로는 | v | -1 반복으로 계산됩니다. 왜 우리가 지수를 말합니까. 우리가 일반적으로하는 모든 반복에 대해 동일한 순서를 선택하면 이완 코드가 호출되지만 정점에 대한 레이블을 업데이트하면 순서 때문에 프로세서 수가 절약 될 수 있습니다. 시각 ?
whokares

1
@whokares : 그들이 제시하는 첫 번째 알고리즘 (지수 적 실행 시간을 가질 수 있음)은 라운드에서 모든 가장자리를 이완시키지 않고 대신 이완 작업이 무언가를 바꿀 수있는 가장자리를 찾아서이 가장자리를 이완시킵니다. 이 작업을 계속하고 음의 무게 사이클이 없으면 결국 가장자리가 더 이상 도움이되지 않고 멈추게됩니다. 그러나 라운드가없고 다음에 이완 할 가장자리에 대한 순서가 없기 때문에 기하 급수적으로 이완 할 수 있습니다. 그들이 제시 한 개선 된 알고리즘은 Bellman-Ford이며 라운드가 있습니다.
Alex ten Brink

3

경로가없는 가장 긴 경로는 |V|입니다. 우리는 소스로 시작하므로 이미 길이 1의 경로가 있으므로 |V| - 1가장 긴 경로를 얻으려면 더 많은 노드 가 필요 합니다.

모든 주문은 불변성을 유지하기 때문에 순서는 중요하지 않습니다. n반복 후 각 노드의 값은 최대 비용을 s포함하는 노드 에서 최소 비용 경로의 비용보다 작거나 같습니다 n.

반복이 시작될 때 비용이 n노드 까지 올 바르면 반복이 끝날 때 n+1노드 까지 올 바릅니다 . 재정렬은 일부 노드가 일반적으로 업데이트되기 전에 비용이 적게 들지만 결국 업데이트됩니다.


나는 그것이 단지 나인지 알지 못하거나 실제로 이러한 사실을 쉽게 시각화 할 수 없습니다. 나에게 여전히 V-1 반복 내에서 업데이트되지 않은 일부 노드가 있다고 생각합니다.
user1675999

아니요, | V |가있을 때 | E | = | V | -1 모서리가 있습니다. 사이클없이 간단한 경로로 연결된 노드. 그리고 당신은 | V | -1 반복을 가지고 있습니다. 틀린 응답을 삭제하십시오.
Sam

@sam 당신은 누구이며 당신이하는 말은 대답과 어떤 관계가 있습니까?
fgb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.