무 방향 그래프에서 길이 제한 간단한 st 경로의 일부인 모든 노드와 모서리를 포함하는 하위 그래프


12

이전에 게시 한 질문 과 매우 유사합니다 . 그러나 이번에는 그래프가 방향이 지정되지 않았습니다.

주어진

  • 무향 그래프 없음 에지 또는 다중 고리와 함께,G
  • 소스 정점 ,s
  • 타겟 정점 t ,
  • 최대 경로 길이 l ,

G - 찾고 있습니다 . 길이가 \ leq l 인 s 에서 t 까지 적어도 하나의 간단한 경로의 일부인 G의 꼭지점과 모든 모서리를 포함하는 G 의 하위 그래프를 찾고 G있습니다 .Gstl

노트:

  • 경로를 열거 할 필요가 없습니다.
  • 매우 큰 그래프 (10 ^ 8 꼭지점, 10 ^ 9 가장자리)에서 알고리즘을 실행해야하므로 효율적인 알고리즘 (시간과 메모리 모두)을 찾고 있습니다.

이것 좀 봐. 실측치 유사한 최소 비용 유량 감소 할 것으로 보이지만 빠른 다음 일반 MCF 알고리즘을 해결하기 위해 네트워크의 특정 특징을 사용하여 종이.
RB

답변:


6

글쎄, 문제는 결국 있습니다. 나는하겠습니다 이전 대답을 그것이 그것은 또한 (다른 질문에 대한 대답으로, NPC 임) 감독의 경우 작동으로, 그리고 쇼 에 대한 .F P T lPFPTl

방향이 지정되지 않은 경우 최소 비용 흐름을 통해 결정적으로 해결할 수 있습니다 (이것은 질문에서 언급 한 규모에서는 작동하지 않지만 지수 알고리즘보다 낫습니다.

다음 절차는 일부 에지 가 출력 그래프의 일부 여야 하는지 여부를 결정합니다 . 원래 문제에 답하기 위해 모든 가장자리를 반복하십시오.e=(u,v)E

플로우 네트워크를 작성하려면 다음과 같이하십시오.

1 단계 : 확장 정점 갖도록 하고 교체 에지와 (그것들은 네트워크 흐름의 일부로서 관한 )의 비용을 0으로 설정하십시오.x e e ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v )exee(u,xe),(xe,u),(v,xe),(xe,v)

2 단계 : 를 제외한 모든 꼭지점 를 두 개의 꼭지점 및 로 모서리 합니다. 이 모서리 비용을 1로 설정하십시오.x e t t + ( t , t + )txett+(t,t+)

3 단계 : 의 모든 모서리 모서리 바꿉니다 . 이 모서리 비용을 0으로 설정하십시오.( a + , b ) , ( b + , a ){a,b}E(a+,b),(b+,a)

4 단계 : 새 정점 를 추가하고 비용 0으로 모서리 를 추가합니다 . ( s , y e ) , ( t , y e )ye(s,ye),(t,ye)

5 단계 : 모든 용량을 1로 설정합니다.

이제 최소 비용 흐름 알고리즘을 실행하여 에서 까지 의 값 2의 흐름을 검색 .y exeye


분석:

  • 매주 2 값 흐름 에 경로의 조합입니다 및 경로 .xeyexesyexetye
  • 모든 정점 에 대해 호 에는 1 개의 용량 만 있기 때문에 경로는 분리 되어 있습니다.t(t,t+)
  • 반환 된 경로는 거리의 합이 최소 인 두 경로이며 발견 된 흐름의 비용이기도합니다. 이를 통해 출력 그래프에 를 추가 하거나 그렇지 않으면 삭제할 수 있습니다.e

1
감소 된 흐름을 줄임으로써 위의 답변에서 논증을 이해하는 것이 더 쉽습니다. 발 간단한 경로가 하는 노드 함유 경로가 IFF에 로부터 로 및 패스 에서 하는 되도록 와 제외하고 노드 이산이다 . 이것은 비 방향성을 중요하게 사용합니다. 흐름을 통해 확인할 수 있으며 비용 버전은 최소 비용 흐름을 통해 수행 할 수도 있습니다. 포함하는 에서 까지 간단한 경로가 있는지 확인할 수 있습니다.t 브이 P의 V S Q의 V t P Q의 V S t의 전자 EstvPvsQvtPQvste 중간에 노드를 도입하여 . e
Chandra Chekuri

@ChandraChekuri-맞습니다 만, 문제에 길이 제약이 없다면 문제를 결정하기위한 훨씬 간단한 알고리즘이 있습니다.
RB

물론, 나는 그 해결책도 알고 있습니다-개념적으로 DFS를 통해 직접 절단 정점과 이중 연결 된 구성 요소를 찾을 수 있지만 분리 된 경로를 통해 이중 연결 된 구성 요소를 이해하는 것이 좋습니다.
찬드라 체 쿠리

@RB : 감사합니다. 제안 된 알고리즘은 l이 상대적으로 클 때 효과적 일 수 있지만 l의 상대적으로 작은 값에 대해서는 차선책 일 수 있습니다. s에서 floor (l / 2)보다 먼 정점을 제거하고 t에서 ceil (l / 2)을 제거하여 G를 먼저 트리밍 할 수 있다고 생각합니다.
Lior Kogan

1
연속적인 최단 경로 알고리즘 (여기서 관심있는 2 개의 경로의 경우 Surballe의 알고리즘이라고도 함)을 조정하십시오. 모든 대해 에서 가장 짧은 2 경로를 찾고 싶습니다 ( 대신 라고 부르는 것이 좋습니다 ) . 먼저 에서 가장 짧은 경로 트리를 계산 한 다음 약간의주의를 기울여 두 번째 경로 계산을 구현하면 이것이 효율적으로 가능하다고 생각합니다 . y y e x e yyyyexey
Chandra Chekuri

1

여기입니다 잘못된 답 : 그것은 일부에서가 아닌 간단한 경로의 일부 정점 출력 에 하고 있습니다하지에서 어떤 간단한 경로의 부분 에 길이의 . 대답은 여전히 ​​asker의 응용 프로그램과 관련이있을 수 있으므로 여기에 남겨 두겠습니다.t s t stst

다음은 시간 에서 실행되는 알고리즘입니다 (실제로 이 작을 때 이보다 빠릅니다 ).O(|V|+|E|)

알고리즘은 깊이 에서 종료 되는 에서 BFS 검색을 실행합니다 . 이 BFS는 최대 길이의 경로로 에서 도달 할 수있는 모든 정점 의 집합 를 제공하고 각 대한 거리 를 계산합니다 . 그럼 난에서 동일한 기능을 수행 할 것 과 세트 얻을 에서와 거리 . 마지막으로 찾고있는 정점은 정확히 입니다. 모서리는 정확히 모서리입니다 (sVssdist(s,v)vVstVttVsolution={v:vVsVt,dist(s,v)+dist(t,v)}E[Vsolution]=(v,u)E:u,vVsolution).

이 알고리즘의 실행 시간은 단지 두 개의 BFS를 수행하기 때문에 입니다. 그러나 실행 시간은 실제로 이며 이는 의 -radius 근처에 있을 때 그래프의 크기보다 훨씬 작습니다. 그리고 는 작습니다.O ( | V s | + | V t | + | E [ V s ] | + | E [ V t ] | ) s tO(|V|+|E|)O(|Vs|+|Vt|+|E[Vs]|+|E[Vt]|)st

편집 : A로부터 BFS 않는 연습에 다소 빠른 알고리즘 거기에 아마 와 만 깊이 보다는 . 이것은 모든 경로를 발견 한 다음 약간의 부기를 유지하면 모든 정점을 찾을 수 있습니다. 이것은 이 작을 때 큰 무작위 모양의 그래프의 경우 제곱근으로 실행 시간을 줄 입니다.t / 2 st/2


3
이렇게하면 경로가 단순 해지지 않습니다. 단순 경로 그래프 및 고려하십시오 . 당신은 반환 통과 간단한 번째 경로가 없다하더라도, 출력의 한 부분으로 ...l = 4 v vtusvxl=4vv
RB

수정 @RB 주셔서 감사합니다. 나는 그것이 틀렸다는 것을 알기 위해 대답을 편집했다.
mobius 만두

1

댓글로 작성되었지만 댓글로 게시하기에는 너무 깁니다.

또한 목적에 맞는 그래프 스패너 또는 에뮬레이터에 관심이있을 수 있습니다. 그래프 의 스패너 는 가장자리가 거의 없지만 거리는 거의 유지 되는 하위 그래프 입니다. 에뮬레이터는 가장자리에 가중치를 부여 할 수 있는 그래프 입니다.H = ( V , E ' ) H = ( V , E ' , w )G=(V,E)H=(V,E)H=(V,E,w)

스패너에 대한 최상의 결과는 모서리와 그래프의 거리 추정치에 대한 +6의 가산 오차입니다. 에뮬레이터의 가장 좋은 결과는 모서리와 추가 오차 +4입니다. 오류가 다항식으로 허용 되더라도 이길 수 있는지 여부는 알려져 있지 않습니다 .O ( N 4 / 3 ) O ( N 4 / 3 )O(n4/3)O(n4/3)O(n4/3)

이것이 유용하다고 들리면, 당신을 위해 관련 구조를 파헤칠 수 있습니다.

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