Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Prochain SlideShare
Chargement dans…5
×

# 35 dijkstras alg

169 vues

Publié le

• Full Name
Comment goes here.

Are you sure you want to Yes No
• Soyez le premier à commenter

### 35 dijkstras alg

1. 1. Discussion #35 Dijkstra’s Algorithm Discussion #35 Chapter 7, Section 5.5 1/15
2. 2. Topics • Shortest path • Greedy algorithms • Dijkstra’s algorithm Discussion #35 Chapter 7, Section 5.5 2/15
3. 3. Shortest Path • Minimum length path from one node to another (e.g. from a to e, the shortest path is 2) • Algorithms b a c d e – Breadth-First-Search, O(n2) in the worst case – Floyd’s, O(n3); but finds all – BFS, starting at each node, O(nm), which beats Floyd’s for sparse graphs Discussion #35 Chapter 7, Section 5.5 3/15
4. 4. Shortest Path in Weighted Graphs • Weights on edges: positive numbers • Algorithms – Simple BFS no longer works (e.g. the shortest path from a to b is not the edge that connects them) – Floyd’s, O(n3); finds all b 5 2 2 a 1 c 10 d 1 1 e • Is there an algorithm that beats Floyd’s? – for the single best path? – for all paths? Discussion #35 Chapter 7, Section 5.5 4/15
5. 5. Dijkstra’s Algorithm • Find the shortest weighted path between two given nodes. (Easier to find the minimum from one to all.) • Intuitively, special BFS: choose smallest accumulated path length • Algorithm b 5 2 2 a c 10 1 d 1 1 e 1. Initialize D (distance) table. 2. Until all nodes are settled, 2a. find smallest distance & settle node. 2b. adjust distances in D for unsettled nodes. Discussion #35 Chapter 7, Section 5.5 5/15
6. 6. Important Aside: Greedy Algorithms • A greedy algorithm always takes the best immediate or local solution while finding an answer. • Greedy algorithms find optimal solutions for some optimization problems, but may find (far) lessthan-optimal solutions for other optimization problems. – Dijkstra’s algorithm is greedy. – There is no greedy algorithm for the traveling salesman problem (find the shortest path to visit all nodes). • When greedy algorithms work, they are usually best. Discussion #35 Chapter 7, Section 5.5 6/15
7. 7. b Trace of Dijkstra’s Algorithm 5 1. Initialize D (start=a) 2. Until all nodes are settled: -find smallest distance & settle node. -adjust distances in D for unsettled nodes. iteration adjust w/d adjust w/c adjust w/e 0 1 2 3 4 b 5 5 54 4 4 c 2 2 2 2 a settled d 1 1 e ∞ ∞2 2 2 c 10 1 distance a 0 2 d 1 1 e a a,d a,d,c a,d,c,e a,d,c,e,b all nodes settled Circled numbers: shortest path lengths from a. Discussion #35 Chapter 7, Section 5.5 7/15
8. 8. b Trace with Different Weights 1. Initialize D (start=a) 2. Until all nodes are settled: -find smallest distance & settle node. -adjust distances in D for unsettled nodes. iteration adjust w/d adjust w/e adjust w/c 0 1 2 3 4 b 6 6 6 65 5 c 4 4 43 3 2 4 a settled d 1 1 e ∞ ∞2 2 c 10 1 distance a 0 6 d 1 1 e a a,d a,d,e a,d,e,c a,d,e,c,b all nodes settled Circled numbers: shortest path lengths from a. Discussion #35 Chapter 7, Section 5.5 8/15
9. 9. Proof that Dijkstra’s Algorithm Works • Loop Invariant: For each settled node x, the minimum distance from the start node s to x is D(x). • Additional observations (which help us in the proof) are also loop invariants. – (a) The shortest path from s to any settled node v consists only of settled nodes. – (b) The shortest path from s to any unsettled node y is at least the largest settled difference so far. Discussion #35 Chapter 7, Section 5.5 9/15
10. 10. Proof by Induction (on the number of iterations) • Basis: 0 iterations: x = s, D(s) = 0 (which is the minimum since all weights are positive) – For (a): initially s = v, the only settled node – For (b): initially all nodes except s are unsettled, and the shortest path to each is at least 0, indeed > 0. • Induction: Assume that the main loop invariant and the loop invariants (a) and (b) hold for k iterations and show that they hold for k+1 iterations. Discussion #35 Chapter 7, Section 5.5 10/15
11. 11. Proof of Induction Part (Sketch) k settled Assume Dijkstra’s algorithm selects x to be settled. s...v x k+1 settled s...v x Assume that the main loop invariant does not hold for the k+1st iteration, then there is a shorter path from s to x. By the induction hypotheses, since Dijkstra’s algorithm s .. . . v  x ..w  y Discussion #35 chooses x, the path from s to x is the shortest using settled nodes, and the path from s to y is no shorter than s to x. Since all weights are positive, the path from y to x is at least 1, so that the assumed shorter path cannot exist. Further (a) and (b) continue to hold: (a) After settling x, the path from s to x consists of only settled nodes. (b) The adjustments are only for paths from x to any unsettled nodes. Since the distance from s to any unsettled node y is at least D(x), and D(x) is the largest settled distance so far. Chapter 7, Section 5.5 11/15
12. 12. Big-Oh for Dijkstra’s Algorithm Adjacency List: b 5 d 1 (c,2) b (a,5) (c,2) c (a,2) 1 e (b,5) 2 1 a 5 c 10 1 √ 0 2 2 a D(x) d n +n+ … (a,1) + k1 (c,10) k2 +(e,1)+ n + k(n-1) ∞ e (d,1) (d,1) Unroll the loop: (b,2) (d,10) (e,1) (c,1) 1. Initialize D (start=a) 2. Until all nodes are settled: 2a. find smallest distance & settle node. = (n−1)n = O(n2) 2b. adjust distances in D for unsettled nodes. 1. = 2(m − # of edges in the O(n)  visit at most all edges for a node  can’t=be more than initialization) O(m) { 2 O(n2. ) dominates n O(n)  each node needs to be settled 2a. O(n)  look through D(x) list to find smallest 2b. O(k)  for chosen node, go through list of length k Discussion #35 Over all iterations, the k’s add up to 2(m − # of edges in the initialization). Chapter 7, Section 5.5 12/15
13. 13. Big-Oh for Dijkstra’s Algorithm Adjacency List: b 5 d 1 (c,2) b (a,5) (c,2) c (a,2) (b,2) (d,10) 1 d (a,1) (c,10) (e,1) ∞ e (b,5) 2 1 a 5 c 10 1 √ 0 2 2 a D(x) e (d,1) (c,1) (d,1) (e,1) 1. Initialize D (start=a) 2. Until all nodes are settled: 2a. find smallest distance & settle node. 2b. adjust distances in D for unsettled nodes. Clever using POTs: 1. 2. O(mlogn) O(nlogn)  POT (Partially Ordered Tree) construction dominates O(n)  each node needs to be settled 2a. O(logn)  swap and bubble down 2b. O(klogn)  for chosen node, go through list of length k { dominates Discussion #35 Over all iterations, the k’s add up to 2(m − # of edges in the initialization). Chapter 7, Section 5.5 13/15
14. 14. POT Construction/Manipulation b 5 POT construction (start = a) 2 2 a c 10 1 d (b,5) ⇒ (b,5) (c,2) ⇒ (c,2) (b,5) ⇒ (d,1) (d,1) ⇒ ⇒ (b,5) (d,1) (b,5) (c,2) (b,5) (c,2) 1 1 (c,2) (e,∞) e Find smallest  always on top; then swap and bubble down no swap bubble down adjust bubbling (d,1) (e,∞) (c,2) (c,2) (c,2) ⇒ ⇒ ⇒ ⇒ needed ⇒ ⇒ (b,5) (c,2) (b,5) (e,∞) (b,5) (e,2) (b,5) (c,2) (b,5) (e,2) (e,∞) (d,1) Adjust distances  POT doubly linked to adjacency list nodes  bubble up and down, as needed, when going through list of chosen node to adjust values Discussion #35 Chapter 7, Section 5.5 14/15 …
15. 15. Dijkstra’s Algorithm vs. Floyd’s • Dijkstra’s algorithm is O(mlogn) = O(n2logn) in the worst case. • Floyd’s algorithm is O(n3), but computes all shortest paths. • Dijkstra’s algorithm can compute all shortest paths by starting it n times, once for each node. Thus, to compute all paths, Dijkstra’s algorithm is O(nmlogn) = O(n3logn) in the worst case. • Which is better depends on the application. – Dijkstra’s algorithm is better if only a path from a single node to another or to all others is needed. – For all paths, Dijkstra’s algorithm is better for sparse graphs, and Floyd’s algorithm is better for dense graphs. Discussion #35 Chapter 7, Section 5.5 15/15