동적 그래프의 최단 경로 검색


24

현재 유 방향 그래프에서 최단 경로를 연구하고 있습니다. dijkstra 또는 bellman-ford와 같이 네트워크에서 가장 짧은 경로를 찾기위한 효율적인 알고리즘이 많이 있습니다. 그러나 그래프가 동적이라면 어떻게 될까요? 동적이라고 말하면 프로그램을 실행하는 동안 정점을 삽입하거나 제거 할 수 있습니다. 새 그래프에서 가장 짧은 경로 알고리즘을 다시 실행할 필요없이 가장자리 e를 삽입 한 후 꼭지점 에서 다른 모든 꼭지점 u 로 최단 경로를 업데이트하는 효율적인 알고리즘을 찾으려고 합니다. 어떻게해야합니까? 미리 감사드립니다.vue

  • 참고 : 알고리즘의 첫 번째 반복 후에 변경을 수행 할 수 있습니다.
  • 참고 [2] : 두 노드가 제공되며, 소스 및 마에 대상한다. 이 노드들 사이의 최단 경로를 찾아야합니다. 그래프가 갱신 된 경우 I 만 갱신을 갖고 π ( S , t ) 사이의 최단 경로, St .stπ(s,t)st
  • 참고 [3] : 저는 엣지 삽입 케이스에만 관심이 있습니다.

공식적인 정의 : 그래프 주어 집니다. 정의 갱신 동작 ) 에지의 삽입 등을 1 전자E 또는 2)의 단 가장자리 삭제 E 에서 E . 목표는 업데이트 작업 후 가장 짧은 경로의 모든 쌍의 비용을 효율적으로 찾는 것입니다. 효율적으로, 우리는 각 업데이트 작업 후에 Bellman-Ford 알고리즘과 같은 All-Pairs-Shortest-Path 알고리즘을 실행하는 것보다 적어도 더 나은 것을 의미합니다.G=(V,E)eEeE


편집 : 아래에 문제의 단순화 된 버전이 있습니다.

단방향 모서리와 두 개의 중요한 정점 st 로 구성된 가중치 그래프 가 제공 됩니다. 후보 양방향 에지 의 세트 C 도 제공된다. s 에서 t 까지 거리를 최소화하려면 모서리 ( u , v ) C 를 만들어야합니다 .G(V,E)stC(u,v)Cst


더 명확한 질문 : 경로의 끝점 이 매번 고정되어 있습니까? 에지 삽입 사례 또는 그래프의 임의 변경에만 관심이 있습니까? 나는 당신의 질문에 답하는 연구가 있다고 생각하지만, 불행히도 나는 어디를 볼지 정말로 모른다. 빠른 Google 검색은 이러한 슬라이드 를 보여 주며 매우 유용한 것으로 보이며이 백서 : "동적 그래프의 최단 경로" (링크 작동). (u,v)
usul

답변:


14

아마 눈치 채 셨을 문제는 매우 어려운 문제입니다. 웹을 확인하면 필요하지 않은 복잡한 인스턴스가 생길 수 있습니다. 여기에 해결책이 있습니다-필요에 따라 (즉, 처음부터 모든 것을 다시 계산할 필요가 없습니다).

모서리를 추가하는 경우 (u,v) 다음 이미 내장 된 거리 행렬을 사용하는 경우 다음을 수행하십시오.

모든 노드 y 쌍에 대해 d ( ( x , u ) ) + c ( ( u , v ) ) + d ( ( v , y ) ) < d ( ( x , y ) )를 확인하십시오. 에서 O ( N 2 ) 당신은 노드의 모든 쌍을 비교하고 있기 때문이다.xyd((x,u))+c((u,v))+d((v,y))<d((x,y))O(n2)

에지 삭제의 경우를 들어 : 이미 구축 된 거리 행렬을 감안할 때, 당신은 모든 노드에 대해 가질 수 루트로 최단 경로 트리 . 삭제 된 모서리 e 가 해당 트리에 없으면 u 에서 다른 경로까지의 최단 경로 는 영향을받지 않습니다 (그들은 동일하게 유지됩니다).uueu

경우 최단 경로 트리에 U 의 모든 노드에 대해 다음, V 와 같은 최단 경로 것을 π가 ( U , V ) 가 포함 E 의 경로를 변경한다. 따라서 u 에서 v 까지의 최단 경로를 계산하십시오 . 이제 모든 노드에 대해 이전을 반복하십시오. 이것이 최선의 해결책은 아닙니다. 실제로 최악의 경우 모든 작업을 처음부터 수행하는 것과 무관하게 동일하지만 평균적으로 더 나을 수 있습니다. euvπ(u,v)euv

이보다 더 나은 결과를 얻으려면 다음을 살펴보십시오.

  1. Demetrescu, Camil 및 Giuseppe F. Italiano. "모든 최단 경로를 다이나믹하게하는 새로운 접근법" ACM (JACM) 저널 51.6 (2004) : 968-992. (Google에서 자유롭게 찾을 수 있습니다)

  2. 멋지게 작성된 설문 조사를 보거나


17

The problem you are asking for is a well-known algorithmic problems. It is actually still open, how hard this problem exactly is. Also you should know that there are different incarnations of this problem. In contrast what you are asking for, usually only the distances are returned, whereas you are asking for the the actual shortest paths. Notice that these paths can be already very long. Dynamic graph algorithms distinguish between edge deletions only (decremental dg algorithms), edge insertions only (incremental dg algorithms) and edge insertions and deletions (fully-dynamic dg algorithms). Thus you are interested in incremental algorithms.

O(n2(logn+log2(1+m/n))O(1)O(nlogn) edges, then you could just recompute from scratch with Dijkstra and Fibonacci-heaps and get the same running time as in Thorup's algorithm. So if your graphs are not to dense, I would recommend using Dijkstra.

I am not aware of any better incremental algorithm. But you should do a web search if there exist newer results for this specialized problem.


I needn't update all the shortest paths in the graph, but only between a given pair (s,t). Is there anything better for that?
Rontogiannis Aristofanis

@RondogiannisAristophanes in fact what has been proposed so far is somehow the best. Have a look at this paper which claims that : "the incremental and decremental single-source shortest-paths problems, for weighted directed or undirected graphs, are, in a strong sense, at least as hard as the static all-pairs shortest-paths problem." (to be honest, i have read only th intro) - reference: "On dynamic shortest paths problems", Roditty & Zwick -- but would you please tell us what is the exact problem you have ? what specific scenario ? what have you don so far ? -- maybe we can help you better.
AJed

@RondogiannisAristophanes the better the performance, the harder it is to implement (in most cases) and sometimes in practical applications you dont need all that much improvement on the performance.
AJed

@AJed I edited my post to include a simplified description of the problem.
Rontogiannis Aristofanis

5

I believe the AD* algorithm might help you.

http://www.cs.cmu.edu/~ggordon/likhachev-etal.anytime-dstar.pdf

When updated information regarding the underlying graph is received, the algorithm incrementally repairs its previous solution. The result is an approach that combines the benefits of anytime and incremental planners to provide efficient solutions to complex, dynamic search problems

AD* highlights: It's "anytime", which means it can give you a "sub-optimal solution" very quickly, though it might not be the best. Given enough time though, it will return the optimal solution. Also, you can restrict the sub-optimal solution to be no worse than the optimal solution by some user-defined constant. This gives you the ability to use this in a real-time planning scenario where having an okay solution (where 'okay' is theoretically bounded) is better than having no solution at all.

http://www.cs.cmu.edu/~maxim/software.html

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