1

Looking for k shortest paths that do not share edges. i.e if the paths were represented as sets of edges, their intersection has to be empty.

We could use Dijkstra to find the 1st "disjoint" (edge unique) shortest path from the origin to all vertices. However, to naively find the 2nd disjoint path, one would need to create $|V|$ versions of the graph, each one with a specific set of set of edges missing, corresponding to a path that was discovered with the original Dijkstra results.

Is there a more computationally efficient method to find the $k$ shortest, edge disjoint paths? Even a heuristic would help me.

Edit:

I think this article posted by Raphael is exactly what I need to $k=2$ but I would like to support a great k if possible, up to 4. One more thing, I don't understand the following instruction:

Replace each edge of the shortest path (equivalent to two oppositely directed arcs) by a single arc directed towards the source vertex

What does "equivalent to two oppositely directed arcs" mean? What does replacing an edge with a single arc directed towards the source vertex mean?

https://en.wikipedia.org/wiki/Edge_disjoint_shortest_pair_algorithm

Wait, the problem with the above algorithm is that it doesn't lessen the complexity. It is just as efficient as running Dijkstra twice for each pair of vertices. I'm looking for a better way to get the k disjoint shortest paths between each $v_i$ and $v_j$

AturSams
  • 231
  • 2
  • 7
  • Here is an article: http://ac.els-cdn.com/S0166218X97001212/1-s2.0-S0166218X97001212-main.pdf?_tid=bca1f1ce-15a3-11e5-9041-00000aacb35e&acdnat=1434623049_50627d25d74fca2b5b9fa8214acd6e36 – AturSams Jun 18 '15 at 10:21
  • 1
    Have you read the obvious article? Can you extend the approach to $k$? If not, where do you get stuck? – Raphael Jun 18 '15 at 15:07
  • 2
    Please define what you mean by $k$ shortest paths that do not share edges. The definition is not clear to me: there are multiple possible interpretations. For instance, do you mean: go through the set of all possible paths, from shortest to longest, and take a path whenever none of its edges have been taken so far, otherwise skip it; repeat until you have $k$ paths? Or do you mean some optimization problem where we consider all possible ways of selecting $k$ edge-disjoint paths, and then minimize some objective function (e.g., the average length of those $k$ paths)? Or something else? – D.W. Jun 19 '15 at 06:01
  • What do you want to tell us with this article reference? Do they define exactly the problem you want? (cf @D.W.'s comment: your statement is not clear.) Do they offer a solution? Did you not understanding something in there? – Raphael Jun 19 '15 at 12:08
  • @Raphael, I read it but had trouble understanding the pseudo code. Will go over it again and ask a specific question. – AturSams Jun 24 '15 at 09:31
  • @D.W., Your first definition will suffice for my needs. The 1st path needs to be (one of) the true shortest paths (no optimization); the second one needs to be the shortest path on the graph without the edges used by the first. The k+1th path is the shortest one with the edges of the first k paths. – AturSams Jun 24 '15 at 09:34
  • I suggest editing the question to include this information. (Don't use "EDIT: some stuff"; we have revision history, so we don't need that. Instead, just edit the question to be what it should have been from the start, so it is coherent for a new reader.) 2. I still don't understand the problem. Why do you say you'd have to run Dijkstra's $|V|$ times, to find the 2nd path? Are you aware that for a given $s,t$, the shortest path from $s$ to $t$ is not unique, and in fact there can be exponentially many such paths of the same length?
  • – D.W. Jun 24 '15 at 18:16