Bellman Ford를 사용하여 네거티브 사이클 얻기


20

직접 가중 그래프에서 음의주기를 찾아야합니다. Bellman Ford 알고리즘의 작동 방식을 알고 있으며 도달 가능한 음수 사이클이 있는지 알려줍니다. 그러나 명시 적으로 이름을 지정하지는 않습니다.

사이클 의 실제 경로 을 어떻게 얻을 수 있습니까?V1,V2,V케이,V1

표준 알고리즘을 적용한 후에는 이미 반복을 수행했으며 더 이상 개선 할 수 없습니다. 여전히 노드까지의 거리를 낮출 수 있다면 음수 사이클이 존재합니다.1

내 생각은 : 우리는 여전히 경로를 향상시킬 수있는 가장자리를 알고 각 노드의 선행 작업을 알고 있기 때문에 다시 만날 때까지 그 가장자리에서 되돌아 갈 수 있습니다. 이제 우리는주기를 가져야합니다.

슬프게도, 이것이 올바른지 알려주는 논문을 찾지 못했습니다. 그래서 실제로 그렇게 작동합니까?

편집 : 이 예제는 내 생각이 잘못되었음을 증명합니다. 다음 그래프가 주어지면 노드 에서 Bellman-Ford를 실행합니다 .1

여기에 이미지 설명을 입력하십시오

우리는 순서 가장자리를 처리합니다 . n - 1 반복 후에 노드 거리를 얻습니다 : 1 : 5 2 : 30 3 : 15에이,,기음,1
1:5
2:30
:15

그리고 부모 테이블 :
이 상위 3 (2) 이 상위 3 (3) 부모가 21
2
2

이제 번째 반복을 수행하면 edge a를 사용하여 노드 1 의 거리를 계속 향상시킬 수 있습니다 . 따라서 우리는 음의주기가 존재하고 a 가 그 주기임을 알고 있습니다.1에이에이

그러나, 부모 테이블을 통해 우리의 방법 등을 추적하여, 우리는 또 다른 부정적인주기에 박히 결코 만족하지 다시.기음,에이

이 문제를 어떻게 해결할 수 있습니까?

답변:


14

당신은 대부분 옳습니다. 하나만 더 추가하면됩니다. 사이클을 찾으려고 할 때 선행 체인으로 돌아 가면 시작 정점 또는 지금까지 본 이전 체인에서 이미 본 다른 정점에 도달하면 정지합니다 . 기본적으로 선행 작업을 사용하여 뒤로 이동할 때주기를 감지 할 때마다 정점을 중지하고 출력합니다.V1

에스


링크가 끊어졌습니다.
human.js


방금 Huang 교수의 아이디어를 사용했지만 왜 그가 새 소스 노드와 새 대상 ( s't') 을 추가했는지 이해하지 못합니다 . 길이에 상관없이 모든 기존 정점에 연결된 새로운 소스 노드가 모든 사이클을 가동시키는 것으로 보였습니다.
AbuNassar

0

당신의 모범은 당신의 생각과 모순되지 않습니다. 실제로 음수 사이클을 발견했습니다. 귀하의 예가 보여주는 아이디어는 소스 정점이 음수주기의 노드가 아닐 수 있다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.