跳转至

25.3 Johnson's algorithm for sparse graphs

25.3-1

Use Johnson's algorithm to find the shortest paths between all pairs of vertices in the graph of Figure 25.2. Show the values of \(h\) and \(\hat w\) computed by the algorithm.

\[ \begin{array}{c|c} v & h(v) \\\\ \hline 1 & -5 \\\\ 2 & -3 \\\\ 3 & 0 \\\\ 4 & -1 \\\\ 5 & -6 \\\\ 6 & -8 \end{array} \]
\[ \begin{array}{ccc|ccc} u & v & \hat w(u, v) & u & v & \hat w(u, v) \\\\ \hline 1 & 2 & \text{NIL} & 4 & 1 & 0 \\\\ 1 & 3 & \text{NIL} & 4 & 2 & \text{NIL} \\\\ 1 & 4 & \text{NIL} & 4 & 3 & \text{NIL} \\\\ 1 & 5 & 0 & 4 & 5 & 8 \\\\ 1 & 6 & \text{NIL} & 4 & 6 & \text{NIL} \\\\ 2 & 1 & 3 & 5 & 1 & \text{NIL} \\\\ 2 & 3 & \text{NIL} & 5 & 2 & 4 \\\\ 2 & 4 & 0 & 5 & 3 & \text{NIL} \\\\ 2 & 5 & \text{NIL} & 5 & 4 & \text{NIL} \\\\ 2 & 6 & \text{NIL} & 5 & 6 & \text{NIL} \\\\ 3 & 1 & \text{NIL} & 6 & 1 & \text{NIL} \\\\ 3 & 2 & 5 & 6 & 2 & 0 \\\\ 3 & 4 & \text{NIL} & 6 & 3 & 2 \\\\ 3 & 5 & \text{NIL} & 6 & 4 & \text{NIL} \\\\ 3 & 6 & 0 & 6 & 5 & \text{NIL} \\\\ \end{array} \]

So, the \(d_{ij}\) values that we get are

\[ \begin{pmatrix} 0 & 6 & \infty & 8 & -1 & \infty \\\\ -2 & 0 & \infty & 2 & -3 & \infty \\\\ -5 & -3 & 0 & -1 & -6 & -8 \\\\ -4 & 2 & \infty & 0 & -5 & \infty \\\\ 5 & 7 & \infty & 9 & 0 & \infty \\\\ 3 & 5 & 10 & 7 & 2 & 0 \end{pmatrix} . \]

25.3-2

What is the purpose of adding the new vertex \(s\) to \(V'\), yielding \(V'\)?

This is only important when there are negative-weight cycles in the graph. Using a dummy vertex gets us around the problem of trying to compute \(-\infty + \infty\) to find \(\hat w\). Moreover, if we had instead used a vertex \(v\) in the graph instead of the new vertex \(s\), then we run into trouble if a vertex fails to be reachable from \(v\).

25.3-3

Suppose that \(w(u, v) \ge 0\) for all edges \((u, v) \in E\). What is the relationship between the weight functions \(w\) and \(\hat w\)?

If all the edge weights are nonnegative, then the values computed as the shortest distances when running Bellman-Ford will be all zero. This is because when constructing \(G'\) on the first line of Johnson's algorithm, we place an edge of weight zero from s to every other vertex. Since any path within the graph has no negative edges, its cost cannot be negative, and so, cannot beat the trivial path that goes straight from \(s\) to any given vertex. Since we have that \(h(u) = h(v)\) for every \(u\) and \(v\), the reweighting that occurs only adds and subtracts \(0\), and so we have that \(w(u, v) = \hat w(u, v)\)

25.3-4

Professor Greenstreet claims that there is a simpler way to reweight edges than the method used in Johnson's algorithm. Letting \(w^\* = \min_{(u, v) \in E} \\{w(u, v)\\}\), just define \(\hat w(u, v) = w(u, v) - w^\*\) for all edges \((u, v) \in E\). What is wrong with the professor's method of reweighting?

(Removed)

25.3-5

Suppose that we run Johnson's algorithm on a directed graph \(G\) with weight function \(w\). Show that if \(G\) contains a \(0\)-weight cycle \(c\), then \(\hat w(u, v) = 0\) for every edge \((u, v)\) in \(c\).

If \(\delta(s, v) - \delta(s, u) \le w(u, v)\), we have

\[\delta(s, u) \le \delta(s, v) + (0 - w(u, v)) < \delta(s, u) + w(u, v) - w(u, v) = \delta(s, u),\]

which is impossible, thus \(\delta(s, v) - \delta(s, u) = w(u, v)\), \(\hat w(u, v) = w(u, v) + \delta(s, u) - \delta(s, v) = 0\).

25.3-6

Professor Michener claims that there is no need to create a new source vertex in line 1 of \(\text{JOHNSON}\). He claims that instead we can just use \(G' = G\) and let \(s\) be any vertex. Give an example of a weighted, directed graph \(G\) for which incorporating the professor's idea into \(\text{JOHNSON}\) causes incorrect answers. Then show that if \(G\) is strongly connected (every vertex is reachable from every other vertex), the results returned by \(\text{JOHNSON}\) with the professor's modification are correct.

(Removed)