3
$\begingroup$

I am aware of using Bellman-Ford on a graph $G=(V,E)$ with no negative cycles to find the single-source single-destination shortest paths from source $s$ to target $t$ (both in $V$) using at most $k$ edges. Assuming we have no negative edge weights at all, can we use Dijkstra's algorithm for the same?

My thoughts/algorithm: I was wondering if instead of having a $dist[u$] array (storing the best known distance from s to u), we could use a $dist[u][k]$ table to store the best known distance from $s$ to $u$ using at most $k$ edges (dynamic programming maybe?), and similarly have the priority queue with $(u,n)$ tuples as keys. We can then terminate the algorithm when the tuple popped off the priority queue is $(t,n)$ where t is the target destination and $n <= k$?

$\endgroup$
8
  • 1
    $\begingroup$ As far as I remember you can use Dijkstra's algorithm instead of Bellman-Ford when you don't have edges with negative distance in you graph; I'd have to take a closer look at both the algorithms to elaborate more though $\endgroup$
    – mewa
    Commented Feb 16, 2016 at 13:04
  • 1
    $\begingroup$ 1. Does the graph have any edges with negative length? 2. What time complexity are you looking for? What's the fastest algorithm you were able to come up with? There's a standard solution based on "the product construction" that increases the running time by a factor of $k$; is that of interest to you? $\endgroup$
    – D.W.
    Commented Feb 17, 2016 at 3:20
  • $\begingroup$ See also cs.stackexchange.com/a/43099/755 for a loosely related but not identical problem. $\endgroup$
    – D.W.
    Commented Feb 17, 2016 at 3:24
  • 1
    $\begingroup$ I edited to remove a potential confusing point for readers: Bellman-Ford only requires that the graph have no negative cycles; you want to assume more. $\endgroup$
    – Raphael
    Commented Feb 17, 2016 at 7:20
  • 1
    $\begingroup$ Note that your target running time, assuming the bound is tight, is worse than Bellman-Ford, which runs in time $O(|V| + k \cdot |E|)$ here. $\endgroup$
    – Raphael
    Commented Feb 17, 2016 at 7:25

1 Answer 1

5
$\begingroup$

If the graph has no negative edges, the problem can be solved in $O(k \cdot (|V|+|E|) \lg |E|)$ time using Dijkstra's algorithm combined with a product construction. We construct a new graph $G'=(V',E')$ with vertex set $V' = V \times \{0,1,2,\dots,k\}$ and edge set

$$E' = \{((v,i), (w,i+1)) : (v, w) \in E\}.$$

In other words, for each edge $v \to w$ in $G$, we have edge $(v,i) \to (w,i+1)$ for all $i$ in $G'$.

Now use Dijkstra's algorithm to find the shortest path in $G'$ from $(s,0)$ to a vertex of the form $(t,i)$ where $i \le k$. This will be the shortest path in $G$ that uses at most $k$ edges.

$\endgroup$
2
  • $\begingroup$ Since this is slower than Bellman-Ford (in theory, and probably also in practice because we have to construct a new, rather large graph first), I don't see much point -- but the OP asked for it. $\endgroup$
    – Raphael
    Commented Feb 17, 2016 at 7:25
  • $\begingroup$ @Raphael, yeah, it does seem a bit pointless to me too. $\endgroup$
    – D.W.
    Commented Feb 17, 2016 at 8:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.