playsworld16   3년 전

전형적인 MCMF 문제인데

어디선가 무한 루프라도 걸리는 걸까요?

byeongkeunahn   3년 전

63번 줄처럼 종결조건을 주게 되면, 소스에서 싱크로 가는 경로로 찾은 것이 최단경로가 아닐 수 있습니다. 그러면 다음과 같은 경우에 음수 사이클이 생길 수 있습니다.

  • 소스를 s, 싱크를 t라 합시다. u, v는 중간의 어떤 정점입니다.
    • s ~> u ~> t의 cost는 5입니다.
    • s ~> v ~> t의 cost는 3입니다.
  • 그런데, s ~> u ~> t가 먼저 발견되었다고 합시다. 그러면 더 좋은 경로인 s ~> v ~> t는 발견되지 않습니다.
    • flow augmentation을 하면서, s ~> v ~> t ~> u ~> s의 음수 사이클이 생깁니다. (3-5 = -2)

음수 사이클이 뭐가 문제인가 하면, 바로 다음 iteration에 SPFA를 시행할 때, 무한 루프에 빠지게 되어 문제입니다. 이 상황은 애초에 최적의 비용을 갖는 경로를 택하지 않은 잘못에서 기인하며, 사후적으로 되돌릴 수 없습니다. 음수 사이클이 생긴 이상 s -> t로 가는 최단경로라는 것이 존재하지 않기 때문이죠.

MCMF는 반드시 매회 최적의 flow augmentation 경로를 찾아야 제대로 돌아갑니다.

playsworld16   3년 전

최단경로는 다익스트라로만 처리하다보니 이런 실수를 했네요..

정말 감사합니다!

댓글을 작성하려면 로그인해야 합니다.