graph algorithms - 3 algorithm design and analysis victor adamchikcs 15-451 spring 2014 lecture...
TRANSCRIPT
![Page 1: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/1.jpg)
Graph Algorithms - 3
Algorithm Design and Analysis
Victor Adamchik CS 15-451 Spring 2014
Lecture 13 Feb 12, 2014 Carnegie Mellon University
![Page 2: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/2.jpg)
The Shortest Path Problem
![Page 3: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/3.jpg)
The Shortest Path Problem
S
1
6
7
2
4
5
20
24
14
18
16
30
5
9
44
2
16
3 11
5
6
19
Given a positively weighted graph G with a source vertex s, find the shortest path from s to all other vertices in the graph.
![Page 4: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/4.jpg)
Greedy approach
When algorithm proceeds all vertices are divided into two groups - vertices whose shortest path from the source is known - vertices whose shortest path from the source is NOT known
Move vertices (shortest distance) one at a time from the unknown set to the known set.
![Page 5: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/5.jpg)
The Shortest Path Problem
s
1
6
7
2
4
5
20
24
14
18
16
30
5
9
44
2
16
3 11
5
6
19
9
14
16
32
36
60
Maintain a PQ of distances from the source to a vertex
![Page 6: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/6.jpg)
Complexity
Let D(v) denote a length from the source s to vertex v. We store distances D(v) in a PQ.
INIT: D(s) = 0; D(v)= LOOP:Delete a node v from PQ using deleteMin()Update D(w) for all w in adj(v) using decreaseKey()
D(w) = min[D(w), D(v) + c(v, w)]
O(V)
O(log V)
O(log V)
PQ has V vertices
We do O(E) updates
O (V Log V + E log V)
![Page 7: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/7.jpg)
Assume that a unsorted array is used instead of a priority
queue.
What would the algorithm's running time in this case?
![Page 8: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/8.jpg)
PQ is a linear array
findMin takes O(V) - for one vertexfindMin takes O(V2) - for all vertices
Updating takes O(1) - for one edgetotal edge adjustment O(E)
the algorithm running time O(E + V2)
![Page 9: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/9.jpg)
Why Dijkstra’s algorithm does not work on graphs with negative weights?
5
B X
S A5
3
-9
![Page 10: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/10.jpg)
The Bellman-Ford algorithm
(1958)
repeat V - 1 times:for all e in E: update(e)
![Page 11: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/11.jpg)
The Bellman-Ford Algorithm
for (k = 0; k < V; k++) dist[k] = INFINITY; Queue q = new Queue();dist[s] = 0; q.enqueue(s);while (!q.isEmpty()) { v = q.dequeue(); for each w in adj(v) do if (dist[w] > dist[v] + weight[v,w]) { dist[w] = dist[v] + weight[v,w]; if (!q.isInQueue(w)) q.enqueue(w); }}
![Page 12: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/12.jpg)
What is the worst-case complexity of the Bellman-Ford algorithm?
for (k = 0; k < V; k++) dist[k] = INFINITY; Queue q = new Queue();dist[s] = 0; q.enqueue(s);while (!q.isEmpty()) { v = q.dequeue(); for each w in adj(v) do if (dist[w] > dist[v] + weight[v,w]) { dist[w] = dist[v] + weight[v,w]; if (!q.isInQueue(w)) q.enqueue(w); }}
V
E
![Page 13: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/13.jpg)
Graph with a negative cycle?
4
B X
S A3
1
-9
How would you apply the Bellman-Ford algorithm to find out if a graph has a negative
cycle?
![Page 14: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/14.jpg)
How would you apply the Bellman-Ford algorithm to find out if a graph
has a negative cycle?
Do not stop after V-1 iteration, perform one more round. If there is such a cycle, then some distance will be reduced…
![Page 15: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/15.jpg)
Bellman-Ford
Dynamic programming approach
We will be counting the number of edges in the shortest path
![Page 16: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/16.jpg)
Dynamic programming approach
For each node, find the length of the shortest pathto t that uses at most 1 edge, or writedown ∞ if there is no such path.Suppose for all v we have solved for length of the shortest path to t that uses k − 1 or fewer edges. How can we use this to solve for the shortest path that uses k or fewer edges?
We go to some neighbor x of v, and then take the shortest path from x to t that uses k−1 or fewer edges.
![Page 17: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/17.jpg)
All-Pairs Shortest Paths (APSP)
Given a weighted graph, find a shortest path from any vertex to
any other vertex.
Note, no distinguished vertex
![Page 18: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/18.jpg)
All-Pairs Shortest Paths
One approach: run Dijkstra's algorithm using every vertex as a source.
Complexity: O(V E Log V)
But what about negative weights…
sparse: O(V2 Log V)
dense: O(V3 Log V)
![Page 19: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/19.jpg)
APSP: Bellman-Ford’s
Complexity : O(V2 E)
Note, for a dense graph we have O(V4).
![Page 20: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/20.jpg)
APSP :
Dynamic programming approach
Floyd-Warshall, O(V3)
We won’t discuss it…
![Page 21: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/21.jpg)
APSP: Johnson’s algorithm
Complexity: O(V E + V E log V)
for a dense graph -- O(V3 log V) .
for a sparse graph -- O(V2 log V) .
![Page 22: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/22.jpg)
Johnson’s Algorithm
It improves the runtime only when a graph has negative weights.
A bird’s view:- Reweight the graph, so all weights are nonnegative (by running Bellman-Ford’s)
- Run Dijkstra’s on all vertices
Complexity: O(V E + V E log V)
![Page 23: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/23.jpg)
Johnson’s Algorithm:intuition
The way to improve the runtime is to run Dijkstra’s from each vertex.
But Dijkstra’s does not work on negative edges.So what about if we change the edge weight to be nonnegative?
We have to be careful on changing the edge weight… to preserve the shortest path
![Page 24: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/24.jpg)
Wrong reweighting(adding the fix amount)
2
B X
S A2
3
3C
-3
The actual shortest path to X is S-B-C-X
Let us add 3 to all edges
![Page 25: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/25.jpg)
Wrong reweighting (adding the fix amount)
B X
S A5
6
C
5
0 6
Shortest path to X is S-A-X
![Page 26: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/26.jpg)
Adding the fix amount does not work, since every shortest path has a different number of
edges
![Page 27: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/27.jpg)
Johnson’s Algorithm:reweighting
Every edge (v, u) with the cost w(v, u) is replaced by
w*(v, u) = w(v, u) + p(v) – p(u)
where p(v) will be decided later.
u
w(v, u) = 2
v
p(v)=-2 p(u)=1w*(v, u) = 2 + (-2) – 1 = - 1
![Page 28: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/28.jpg)
Johnson’s Algorithm:reweighting
Theorem. All paths between the same two vertices are reweighted by the same amount.
Proof.
Consider path v = v1v2 … vn = uThen we have
w*(v,u) = w*(v1, v2) + … + w*(vn-1, vn) = w(v1, v2) + p(v1) – p(v2)
+ w(v2, v3) + p(v2) – p(v3) + … w*(v, u) = w(v, u) + p(v) –
p(u)
Telescoping sum
![Page 29: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/29.jpg)
Johnson’s reweighting changes
any path between u and v by the same amount and
therefore preserves the shortest path unchanged
w*(v, u) = w(v, u) + p(v) – p(u)
![Page 30: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/30.jpg)
Find vertex labeling P(v)
c
a
x
b
4-2
-1
y
z
2 -3
1 -4
First we need to create a new vertex and connect it to all other vertices with zero weight. s
Note this change in the graph won’t change the shortest distances between vertices.
![Page 31: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/31.jpg)
Running SSSP
c
a
x
b
4-2
-1
y
z
2 -3
1 -4
s
Next we run Bellman-Ford’sstarting at vertex s.
Shortest Path s-a is 0
s-b is -2
0
-3
s-c is -3
-2
and so on…
-1
0
-6
Now we define p(v) as the shortest distance s-v.
![Page 32: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/32.jpg)
Johnson’s Reweighting
c
a
x
b
4-2
-1
y
z
2 -3
1 -4
Here we redraw the example by using
s
0
-3
-2
-1
0
-6
w*(v, u) = w(v, u) + p(v) – p(u)
Edge (a,b): -2+0-(-2) = 0
0
0
Edge (b,c): -1+(-2)-(-3) = 0
0
Edge (z,x): 1+0-(-1) = 2
2
0
1
2
![Page 33: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/33.jpg)
New graph
c
a
x
b
y
z
After Johnson’s reweighting we get a new graph with non-negative weights.
0
0
0
2
0
1
2
Remember, Johnson’s reweighting preserves the shortest path.
Now we can use Dijkstra’s
![Page 34: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/34.jpg)
Johnson’s Algorithm:reweighting
Theorem. After reweighting every edge has a nonnegative cost.
Proof. Consider edge (v, u)p(v) is the shortest distance from s to v
w*(v, u) = w(v, u) + p(v) – p(u)
p(u) is the shortest distance from s to u
p(u) ≤ p(v) + w(v, u)
v u
s since the shortest path s-u cannot be longer then p(v) + (v, u). QED
![Page 35: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/35.jpg)
Johnson’s Algorithm
1. Add a new vertex s and connect it with all other vertices.2. Run Bellman-Ford’s algorithm from s to compute p(v).
Note that Bellman-Ford’s algorithm will correctly report if the original graph has a negative cost cycle.
3. Reweight all edges: w*(v,u) =w(v,u)+p(v)–p(u)4. Run Dijkstra’s algorithm from all vertices
5. Compute the actual distances by subtracting p(v)–p(u)
![Page 36: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/36.jpg)
Complexity
1. Add a new vertex s and connect it with all other vertices.
2. Run Bellman-Ford’s algorithm from s to compute p(v).
3. Reweight all edges: w*(v,u) =w(v,u)+p(v)–p(u)4. Run Dijkstra’s algorithm from all vertices
5. Compute the actual distances by subtracting p(v)–p(u)
O(E)
O(V)
O(V E)
O(E)
O(V E log V)
Total: O(V E log V)
![Page 37: Graph Algorithms - 3 Algorithm Design and Analysis Victor AdamchikCS 15-451 Spring 2014 Lecture 13Feb 12, 2014Carnegie Mellon University](https://reader037.vdocument.in/reader037/viewer/2022102722/551b1a6b550346cf5a8b54ef/html5/thumbnails/37.jpg)
Johnson’s Algorithm
It shines for sparse graphs with negative edges
O(V2 log V)
Better than Floyd-Warshall, which is O(V3)