동적 그래프의 증분 최대 흐름


12

동적 그래프에서 최대 흐름을 계산하는 빠른 알고리즘을 찾고 있습니다. 그래프 부여하여 예 (S) , t V 우리는 최대 유량이 F 에서 G 에서 S 받는 t를 . 그 후, 새로운 / 이전 노드 u 는 대응하는 에지로 추가 / 삭제되어 그래프 G 1 을 형성한다 . 새로 생성 된 그래프에서 최대 흐름은 얼마입니까? 최대 유량을 다시 계산하지 못하게하는 방법이 있습니까?G=(V,E)s,tVFGstuG1

시간 / 메모리를 많이 소비하지 않는 모든 전처리는 높이 평가됩니다.

가장 간단한 아이디어는 흐름을 다시 계산하는 것입니다.

또 다른 간단한 아이디어는 이것으로 이전 최대 흐름 계산에 사용 된 모든 확장 경로를 저장하고 정점 를 추가하기 위해 소스에서 시작하여 v 로 이동 하는 간단한 경로 (이전 단계로 용량 그래프에서)를 찾을 수 있습니다. 대상으로하지만, 문제는,이 경로는 간단해야, 나는보다 더 찾을 수 없습니다 O ( N m ) 이 경우에, 대한 m = | 전자 | . 또한 경로가 하나 인 경우 O ( n + m ) 로 수행 할 수 있지만 그렇지 않습니다.vvO(nm)m=|E|O(n+m)

또한 위의 노드를 제거해도 작동하지 않습니다.

또한 가장자리대한 증분 방식 과 같은 논문을 이미 보았지만 이 경우 충분 하지 않은 것 같습니다. 각 가장자리에 대해 이상 이며이 경우에는 확장이 적합하지 않습니다 (우리는 단지 흐름을 다시 계산합니다). 또한 현재 Ford-Fulkerson 최대 흐름 알고리즘 을 사용하고 있습니다. 온라인 알고리즘에 대한 더 나은 옵션이 있으면 알고 싶습니다.O(m)


"문제는이 경로는 단순해야한다"는 부분을 명확히 해 주시겠습니까? 나는 그것을 얻지 못했습니다.
Dmytro Korduban 2012

@ maldini.ua, 실제로, 소스에서 로 이동 한 다음 v 에서 대상으로의 경로 는 공통 정점이 없어야합니다 ( v 제외 ). v 가 새로 추가 된 노드라고 가정하십시오 . 그렇지 않은 경우 일부 검사를 건너 뛸 수 있으며 더 빠른 알고리즘을 가질 수 있습니다 (평균적으로 또는 무증상 일 수 있음). vvvv
Saeed

알았지 만 나에 관해서는 에 대해 특별한 것이 아닙니다 . 가장 간단한 재 계산 아이디어는 다음과 같습니다. 1) 잔차 그래프에 모서리가있는 새로운 정점을 추가 합니다 . 2) 선택한 최대 유량 알고리즘을 사용하여 업데이트 된 잔차 그래프에서 최대 유량을 찾습니다. 제안한 사례는 최대 흐름 알고리즘에 의해 "자동으로"처리됩니다 (즉, 확장 경로 등을 찾지 못함). 노드 제거에 관심이 있다면 답을 쓸 수 있습니다. PS 명확하게하기 위해, 지시 된 그래프 또는 지시되지 않은 그래프가 있습니까? v
Dmytro Korduban 2012

@ maldini.ua, 일반 재 계산 추가 현재 솔루션에 대한 복잡성 때문에 그것이 좋은 것이라고 생각하지 않습니다 (일반적으로 너무 많은 가장자리가 쓸모없고 실제로 매우 높은 성능 문제를 일으키지 않는다는 것을 알면 좋을 수도 있습니다). 그러나 제거에 대한 아이디어가 있다면 노드, 나는 당신의 아이디어를보고 싶습니다. 또한 그래프가 지시됩니다. 추신하지만 두 경우 모두에 관심이 있습니다. |G|
Saeed

잔차 그래프에서 실행한다는 것을 기억하십시오. 이때 용량이 거의 0 인 모서리가 있어야합니다. 일반적으로 스파 스 그래프에서 특히 빠르게 작동합니다 (적어도 나를 위해 일했습니다). 반면에 "간단한 경로"접근 방식은 좀 더 세련된 느낌을줍니다. 또한 Ford-Fulkerson의 실행 시간에 바인딩되어 있음을 잊지 마십시오 (여기서 | f |v 의 인접 에지 용량의 합으로 제한됨). O(|f||E|)|f|v
Dmytro Korduban 2012

답변:


6

설명 된 접근법은 이론적으로 최적이 아닐 수 있습니다. 저자에게는 효과가있을 수있는 간단한 실용적인 솔루션 일뿐입니다. 나는 그것이 널리 알려진 민속이라고 항상 생각하기 때문에 어떤 참고도 제공 할 수 없지만 이상하게도 아무도 대답에 게시하지 못했습니다. 그래서 나는 그것을한다.

무지향 네트워크 가 있다고 가정합니다 . 정점 / 호 삽입 / 삭제가 쉬운 데이터 구조에 저장되어 있다고 가정합니다. 때때로 우리는 잔여 네트워크 G f (즉, 업데이트 된 용량 c f = c f )를 사용할 것입니다.G=(V,E,c)Gfcf=cf

첫 번째 부분은 정점 삽입 / 삭제를 처리하는 방법입니다. 삽입하기에는 다소 간단합니다.

  1. 잔차 네트워크에 해당 모서리가있는 새로운 정점을 추가합니다.
  2. 선택한 maxflow 알고리즘을 사용하여 업데이트 된 잔차 네트워크에서 최대 흐름을 찾으십시오.

삭제의 경우 상황이 더욱 복잡해졌습니다. 우리가 삭제 하려는 정점 를 2 개의 반쪽 v i nv o u t 로 분할하여 모든 아크가 v i n을 가리키고 , 모든 out-arcs가 v o u t 에서오고이 새로운 꼭짓점이 연결되도록 상상해보십시오 무한한 능력의 호. 그러면 v 삭제는 v i nv o u t 사이의 아크 삭제와 같습니다 . 이 경우 어떻게됩니까? f v로 표시하자vvinvoutvinvoutvvinvoutfv정점을 통과하는 흐름 . 이어서 v에 난을 N 초과 경험할 F의 브이 흐름 단위 및 V O U t가 부족 경험할 F V의 오른쪽 삭제 후 흐름 유닛 (흐름 제한 분명 세분화된다). 흐름 제약 조건을 다시 유지하려면 흐름을 다시 정렬해야하지만 원래 흐름 값을 최대한 높게 유지하려고합니다. 총 유량을 줄이지 않고 재 배열을 할 수 있는지 먼저 살펴 보자. v i n 에서 v o u 까지 maxflow ~ f v 를 찾는 지 확인하려면vvinfvvoutfvfv~vin 은 "의 cutted"잔류 네트워크 (즉, 호 접속없이 V N V O U t ). 우리는분명히 f v로 묶어야합니다. f v와 같으면운이 좋을 것입니다.v를통과하는 흐름을총 흐름이 변경되지 않도록다시 할당했습니다. 다른 경우 전체 흐름의 "쓸모없는"초과 감소해야Δ= F V - ~ F의 V의 단위. 그렇게하려면st를임시로 연결하십시오voutvinvoutfvfvvΔ=fvfv~st무한 용량의 아크로 maxi 알고리즘을 에서 v o u t 까지 다시 실행하십시오 (흐름을 Δ로 묶어야합니다 ). 그러면 잔여 네트워크가 고정되고 유량 제한이 다시 유지되어 총 유량이 Δ 만큼 자동으로 감소 합니다.vinvoutΔΔ

이러한 업데이트의 시간 복잡도는 사용하는 maxflow 알고리즘에 따라 달라질 수 있습니다. 최악의 경우는 꽤 나쁘지만 여전히 총 ​​재 계산보다 낫습니다.

O(|V|2|E|)O(|E|2logCmax)


마지막 vzn의 답변을 읽은 후 this의 90 페이지에 설명 된 비슷한 접근법을 발견 했습니다 .
Dmytro Korduban

fv~fvfv~Δ

vucf(v,u)cf(u,v)f(v,u)=f(u,v)

엣지 용량을 변경하려는 경우 어떻게해야할지 아이디어가 있습니까?
Chet

-1

새로운 정보를 고려하고 까다로운 이전의 잘못된 시작 / 빨간 청어 참조를 피하는 것이 좋습니다.

강력한 최소 컷 계산을위한 확장 기능으로 온라인에서 최대 흐름 문제의 온라인 시퀀스를 빠르게 해결 Doug Altner 및 Özlem Ergun

이 참조 는 MFP의 온라인 시퀀스 및 "따뜻한 시작"을 고려 합니다. 즉, 이전 MFP에 대한 증분 chgs를 빌드합니다. "우리는 블랙 박스 MFP 솔버를 사용하는 유사한 코드를 비교할 때 알고리즘이 실행 시간을 몇 배나 줄인다는 것을 보여줍니다. 특히, 최소 최소 컷 알고리즘은 4 초 이상 필요한 인스턴스를 몇 초 안에 해결할 수 있음을 보여줍니다. 블랙 박스 최대 유량 솔버를 사용하는 시간 "


최대 흐름과 관련된 문제에 대한 개선 사항 Altner, Douglas S., Georgia Tech

이 2008 년 박사 학위 논문 (다운로드 가능한 PDF)에서 저자는 새로운 정점을 추가하는 문제 (여러 개의 새로운 아크를 갖는 문제)에 "충분히 근접한"것으로 보이는 점진적으로 아크를 추가하는 문제를 고려합니다.

이 참조의 대부분은 초록의 첫 번째 부분에 명시된 네트워크의 일부 (컷 / "차단")를 삭제하는 것과 관련이 있습니다.

esp "최대 흐름의 IV 해결 온라인 시퀀스 ...... p63"를 참조하십시오.

p 63 "그러나이 장의 목표는 블랙 박스 최대 유량 솔버를 반복적으로 사용하여 대량의 MFP 시퀀스를 해결하는 데 엄청난 수의 불필요한 계산이 발생할 수 있음을 독자에게 확신시키는 것입니다."

p66 "앞서 언급 한 응용에서 MFP는 일반적으로 위상 적으로 유사합니다. 즉, 시퀀스에서 다음 MFP는 적은 수의 아크를 추가 또는 제거하거나 로컬 화 된 아크 세트의 용량을 예측 가능하게 변경하여 이전 MFP와 다릅니다. "이러한 인스턴스를 해결할 때 이전 문제에 대한 솔루션 이외의 것을 저장하는 데 필요한 시간과 공간은 일반적으로 보증되지 않습니다."

p67 author는 여기서 "warm start"접근 방식을 사용합니다. "전체 온라인 최적화 문제를 신속하게 해결하기위한 효과적인 전략은 효율적인 재 최적화 휴리스틱을 개발하는 것입니다.이를 위해 효율적인 웜 스타트를 위해 설계된 수정 된 최대 흐름 알고리즘을 개발합니다."

특정 증분 새 아크 문제가있는 esp p71을 참조하십시오.

새로운 아크 최대 흐름 재 최적화 문제 (NAMFRP)

저자는보다 일반적인 문제를 고려한다 p67

최대 흐름 재 최적화 문제 (MFROP)
최대 흐름 단일 아크 재 최적화 문제 (MFSAROP)


-3

빠른 검색에서 온라인 버전은 활발한 연구 분야 인 것 같습니다. 문헌 검색 범위를 좁히는 데 도움이 될 수있는 응용 분야는 언급하지 않아도됩니다. 하나의 옵션은 가장 최신 또는 최신 혁신이있는 응용 분야를 찾는 것입니다. 따라서 비전 시스템에는 점증적인 최대 흐름이 적용되며 거기에는 일부 알고리즘이 있습니다. Microsoft 연구소에서 증분 폭 우선 검색 별 최대 흐름을 사용해보십시오 . 보이 스코프와 콜로 모고 로프 알고리즘은 비전 인스턴스의 경우이 애플리케이션에 대한 소개를 해석하는 데 효과적이며, 비전 애플리케이션 외부에서는 성능이 저하 될 수 있지만 알려진 지수 시간 카운터 예제는 없습니다. 데이터에서 B & K 알고리즘을 시도하고 어떻게 작동하는지 확인하는 것이 좋습니다.

그래프 가장자리 수에 선형 인 증분 알고리즘이 속도가 충분하지 않다고 말하는 것 같습니다. 그러나 그다지 높은 효율은 아닙니까? 당신은 얼마나 많은 가장자리를 다루고 있습니까? 어쩌면 접근 방식은 그래프가 비싸거나 중요한 요소 인 경우 그래프를 통과하는 비용을 줄이는 것일 수 있습니다 (예 : db에 저장된 그래프 대 메모리에 저장된 그래프)

여기에 최대 흐름에 대한 비 증분 알고리즘이 P에 있지만 증분 버전은 NP 완료라고 주장하는 흥미로운 논문이 있습니다. "우리가 아는 한, 우리의 결과는 증분 버전이 NP 인 P- 시간 문제를 최초로 발견 한 것입니다."

Hartline, Sharp의 증분 흐름


고맙게도, 나는 당신의 참고 논문을 읽지 않았고, 그것들을 살펴볼 것입니다 (전에는 몇 가지 논문을 보았고 쓸모가 없다는 것을 알았습니다). 그러나 내 문제 영역에 대해서는 주식 마케팅의 실제 작업 상황에서 문제입니다. 이 문제를 해결해야한다는 것을 알았을 때 어떤 일이 발생했는지 말하기는 약간 복잡합니다. 사실 언뜻보기에는 어렵다고 생각했지만 코드를 시도한 후에는 쉽지 않습니다. 이 알고리즘은 휴대 전화에서 실행되며 속도가 빠르지 않으며 고객은 내 알고리즘을 좋아하지 않습니다. 또한 때때로 너무 많은 모서리가 새 노드와 함께 제공 될 것입니다. 이것이 병목 현상입니다.
Saeed

흥미 롭군 처리 능력이 제한적이고 빠른 업데이트가 필요한 휴리스틱을 사용해야 할 것 같습니다. 처리가 대신 "클라이언트"(귀하의 경우 전화)에서 서버로 이동 될 수 있습니까? 모든 클라이언트가 문제의 다른 버전 (즉, 다른 데이터)을 계산해야합니까?
vzn

이란에서 가장 큰 문제는 인터넷 연결 속도이므로 서버쪽으로 옮길 수 없습니다. 괜찮다면 (좋은 속도) 재 계산이 나쁘지 않은지 확인하십시오.
Saeed

6
이것이 노드와 가장자리를 추가하여 시간이 지남에 따라 진화하는 그래프에 관한 원래 질문에 어떻게 대답하는지 알 수 없습니다. 첫 번째 논문은 표준 one-shot maxflow 문제에 대한 증분 알고리즘을 설명합니다. 두 번째 논문 은 가장자리 세트가 고정되어 있지만 시간이 지남에 따라 용량이 커지는 다른 "증분 최대 유량"문제에 대한 용지를 설명합니다 .
Jeffε

1
@ Jɛ ff E, 네, 맞습니다 :) 사실 그 전에는 참고 논문과 비슷한 논문을 볼 수 있지만, 제 문제와 관련이 없다고 말한 것처럼 지금까지 가장 가까운 논문은 제가 참조한 것입니다.
Saeed

-5

또 다른 가능성 / 방향은 "최대 흐름을위한 가장 효율적인 알고리즘 중 하나"이며 데이터에 따라 더 복잡한 프로파일을 가질 수 있는 푸시-리 라벨 최대 흐름 알고리즘입니다. 예를 들어 위키 백과 페이지 상태

O(V3)O(V2EO(VElog(V2/E))


3
이 답변이 게시 된 질문과 어떤 관련이 있는지 다시 한 번 알 수 없습니다. Push-relabel은 표준 최대 흐름 문제에 대한 답변을위한 잘 알려진 교과서 전략입니다.
Jeffε

포드-포커 슨도 마찬가지야? & OP는 더 나은 것을 요구합니다. 밀어 넣기 레이블이 포드 풀 커슨보다 더 나쁘다는 것을 알고 있습니까? 명확하지 않은 OP는 푸시 레이블에 익숙합니다. 교과서에 나타나는 알고리즘은 분명히 대답을 거부하는 즉각적인 기준이 아닙니다.
vzn

3
사실 맞아요; 표준 교과서 (또는 wikipedia)에서 답변 된 질문은 연구 수준이 아닙니다. 그러나 증분 흐름에 대한 첫 번째 게시 된 질문은 흥미롭고 확실히 범위 내에 있습니다. (정답이 없으면 정답이 "좋은 질문입니다. 아무도 모릅니다."일 수 있음)
Jeffε

vzn은 귀하의 기여에 감사하지만 "푸쉬-리 라벨이 ford-fulkerson보다 더 나쁘다는 것을 알고 있습니까?"라고 대답하는 것은 좋은 이유가 아닙니다. 온라인 알고리즘에서 "푸시-리 라벨"이 더 나은 이유를 알고 있다면 Ford-Falkerson보다 말하기가 좋습니다. 단순성, 상수가 낮기 때문에 개인적으로 Ford-Falkerson을 좋아하며 과거부터 알고 있습니다. 그러나 내가 말했듯이 모든 경우에 좋은 옵션이라고 말할 수는 없었 으며이 알고리즘은 단순히 비교할 수 없으며 실제 테스트가 필요합니다.
Saeed

pt는 데이터에 대해 잘 실행되지 않는 최대 흐름 알고리즘이 하나 있으면 다른 데이터 프로필에 대해 최적화 된 것이 거의 없기 때문에 성능이 우수하다고 알려진 다른 하나의 esp 알고리즘을 시도하십시오. 온라인 / "정점 증분"은 아니지만 대안이없는 경우 오프라인 사례에 더 적합합니다. 내가 찾은대로 온라인 버전이 존재하지만 구현하기가 상당히 어려울 것입니다.
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.