1 / 56

Instructor: Shengyu Zhang

CSC3160: Design and Analysis of Algorithms. Week 2: Single Source Shortest Paths. Instructor: Shengyu Zhang. Content. Graphs: model, size, distance. Problem: shortest path. Algorithms: BFS: unweighted Dijkstra : non-negative weights Bellman-Ford: negative weights. 3. 2. 1. 4. 3.

parker
Download Presentation

Instructor: Shengyu Zhang

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSC3160: Design and Analysis of Algorithms Week 2: Single Source Shortest Paths Instructor: Shengyu Zhang

  2. Content • Graphs: model, size, distance. • Problem: shortest path. • Algorithms: • BFS: unweighted • Dijkstra: non-negative weights • Bellman-Ford: negative weights

  3. 3 2 1 4 3 2 1 4 Abstract model • Graph: • : set of nodes/vertices/points • : set of edges • undirected graph: • Edges have no directions • directed graph: • Edges have directions

  4. Graph, graph, graph… • Why graph? There are lots of graph examples in our lives. • Name one. • Information: WWW, citation • Social: co-actor, dating, messenger, communities • Technological: Internet, power grids, airline routes • Biological: Neural networks, food web, blood vessels • …

  5. Adjacency matrix: , where for general graphs Adjacency list for sparse graphs 3 2 1 4 Representations of graphs

  6. Size of graph • The size of a graph: • Adjacency matrix: . • Adjacency list: • for undirected graphs. • Each undirected edge is counted twice. • for directed graphs. • Each directed edge is counted once.

  7. 3 2 1 4 Distance • Next we focus on undirected graphs • Directed graphs are similarly handled. • A path from to : . • There may be more than one path from to . • = # edges of a shortest path from to • = {’s neighbors} = {}

  8. A natural question: compute the distance and a shortest path between vertices • : -distance • all other vertices: Single-Source Shortest Paths • all vertices → all other vertices : All-Pair Shortest Paths

  9. Why shortest paths? • Google map for directions • Optimal solution of Rubik’s cube. • Guess what’s the number? • Erdős number

  10. t s -distance • Let’s consider the simplest case first: -distance in an undirected graph. • How to do it? • Even a very inefficient algorithm is ok.

  11. t s BFS • One way of thinking: • Methodology 1: Start from simple cases • Methodology 1.1: Start from the case in which some parameter is small • Let’s consider the following question: Can we at least know whether ? • This is very simple: just check whether is a neighbor of .

  12. t s Little by little… • Let’s go slightly further: Can we know whether ? • Not hard either: Just see whether is a neighbor of some neighbor of . • Note that some neighbors of neighbors of may have been seen before either as itself or as a neighbor of .

  13. t s In general? • all neighbors of • the vertices with distance 1 from . • all neighbors of • the vertices with distance 2 from . • all neighbors of • the vertices with distance 3 from . • … • all neighbors of • If we find in this step , then .

  14. BFS • This is called the breadth-first search (BFS). • Why it works? • [Thm] If we find in Step , then . Or equivalently, • [Thm] contains exactly those vertices with distance from .

  15. Proof of • Let’s prove this by induction on . • : trivially true. • Suppose is correct, consider . Need: • 1. If , then • 2. If , then k 2 1 t s

  16. 1. If , then Recall:all neighbors of • A shortest path from to has length • Just before reaching , the path reaches some with and . • By induction, . So by algorithm, ……unless for some • But the bad case won’t happen since otherwise by induction. k 2 1 t s t’

  17. 2. If , then Recall:all neighbors of • : Why? since is a neighbor of some vertex , • by induction. • : Why? won’t be since otherwise it’d have been covered by some with . (By induction) k 2 1 t s t’

  18. Implementation of the algorithm • Queue: first in first out. • Basic operations: • enqueue • dequeue enqueue dequeue

  19. Algorithm for -distance • Initialize: for all other , • While is not empty • Dequeue the top element of • // Enqueue all neighbors of that haven’t been covered so far into , with function updated For all neighbors of , if , • enqueue() • If is found, then stop and output

  20. t s Let’s run it step by step together on the board! • ; for all other , • While is not empty • Dequeue the top element of • For all neighbors of , if , • enqueue() • If is found, then stop and output

  21. Complexity • Initialize: • for all other - • - 1 • While is not empty • Dequeue the top element of - 1 • For all neighbors of , if ,- • enqueue() - 1 • - 1 • If is found, then stop and output dist(t) - 1 • Total:

  22. One observation • If we don’t stop when finding , then eventually the algorithm finds the distances from to all other nodes .

  23. Map • Finished: On unweighted graphs, distance defined as the min # of edges • BFS • Complexity: • Next: • non-negative weighted graphs. • Negative weighted graphs

  24. Weighted edges • More general: each edge has a non-negative length. • A length function is given. • sum of lengths of edges on • min over all from to • Question: How to do now? • Let’s try BFS first.

  25. BFS Algorithm for -distance • Initialize: for all other , • While is not empty • Dequeue the top element of • (Enqueue all neighbors of that haven’t been covered so far into , with function adjusted) For all neighbors of , if , • enqueue() • If is found, then stop and output Is this correct? .

  26. 1 1 1 1 10 s u Problem of BFS • Nodes collected at iteration may have a shortest path with more than edges. • , the “distance” we keep in algorithm, is only an upper bound of the real distance . • i.e. . • It’s not necessary yet since we may find better route later. • As a result, after iteration , we don’t know for . • though we know an upper bound of .

  27. Interesting things coming… • The upper bound is tight for some vertices . • . • Suppose we maintain a set of correct vertices • i.e. • We want to find another correct vertex in • s.t. we can put into (and then update ’s neighbors). • Question: Which to pick?

  28. When you want to pick something… • Methodology 2: Good properties often happen at extremal points. • Let’s consider to pick the currently “best” one. • The with the • Recall that now is only an upper bound of • It corresponds to a path we’ve found so far, but there may be better routes found later.

  29. Dijkstra’s algorithm • Initialize: for all , and . • Let contain all of // • while find a with delete from for each // update if // update the estimated upper bound

  30. Running on an example

  31. Running on an example (continued)

  32. Running on an example (continued)

  33. Running on an example (continued)

  34. Key property in the proof • Recall what we want: achieving the minimum in always has • The whole idea and proof is in the next slide.

  35. Proof of the key property: . • Recall: . • Will show: . • Take a shortest path from to • Suppose leaves (for 1st time) by edge . • [Claim] . • The part of from to is a shortest path to . • Any prefix of a shortest path () is a shortest path itself (). • since . • So has been tightened to when updates its neighbors • So . part whole Claim

  36. Map • We’ve shown Dijkstra’s algorithm for -shortest path, and proved its correctness. • Next: • Implementation (of min-finding) and complexity • Shortest path for negative weighted graphs

  37. Complexity • Initialize: for all , and - |V| • Let contain all of - |V| • while find a with min , put it into - cost of delete-min foreach - |N(u)| // update if - cost of decrease-key // update the estimated upper bound • Total:|V|∙ (cost of delete-min) + |V|+ O(|E|) ∙ (cost of decrease-key)

  38. Implement of the queue • We want a queue good for delete-min • priority queue • cost of delete-min and cost of decrease-key depend on the implementation of priority queue. • Array: • cost of delete-min: length of , which is in general. • cost of decrease-key: • Total cost: . Recall: Total cost =|V|∙ (cost of delete-min) + |V|+ O(|E|) ∙ (cost of decrease-key)

  39. Other choices • Binary heap • Much smaller cost of delete-min: • Slightly larger cost of decrease-key: . • Total:|V|∙ (cost of delete-min) + |V|+ O(|E|) ∙ (cost of decrease-key) = = • Better than the array’s cost when is small • -ary heap: Similar except that it’s now a complete -ary tree. • Fibonacci heap: even better decrease-key cost. • Details omitted; see the book.

  40. Complete binary tree: filled top-down, left-to-right Depth: ≈, where : # nodes A complete binary tree with the following property maintained: Parent’s value ≤ children’s values The property implies that the root has the min value Good: really easy to find min. Bad: deleting the root makes it not a tree any more. Binary heap

  41. 5 2 delete-min • delete-min: • dequeue the root. • Put the last leaf at the root • Let it sift down • If it’s bigger than either child’s value • Swap it and the smaller child • Property “Parent’s value ≤ children’s values” is kept. • Cost: . (∵ height of tree ) 3

  42. DecreaseKey Recall: if - cost decrease-key • DecreaseKey: • After decreasing the key value, • Bubble it up:If it’s smaller than its parent • Swap them. • Property is maintained: • Parent’s value ≤ children’s values • Cost: • Total:|V|∙ (cost of delete-min) + |V|+ O(|E|) ∙ (cost of decrease-key) = = • Better than the array’s cost when is small 5 3 6

  43. Map • We talked about Single Source Shortest Paths problem • On unweighted graphs, distance defined as the # of edges • BFS • On weighted graphs, distance defined as the sum of lengths of edges • Dijkstra’s algorithm • Next: on graphs with negative weights • Bellman-Ford

  44. Further generalization • Allow negative weights on edges? • How to define the length of a path? • For , • Naturally as before, • Only difference is that now some may be < 0. • Problem?

  45. negative cycle • For the graph as given, what’s the shortest path from to • In general, negative cycles make “shortest paths” meaningless. • cycles with negative length • So let’s only consider graphs without negative cycle • In particular, only directed graphs • undirected: negative edge = negative cycle s a 10 8 1 b g -4 1 1 2 -4 c f -1 3 e d -1

  46. Requirements • For a general graph, we thus desire an algorithm that • 1) tells whether the graph contains a negative cycle, and • 2) if not, computes the shortest paths • Bellman-Ford’s algorithm: achieve both! • Let’s first assume no negative cycle, and come back to this case later.

  47. Idea of Bellman-Ford • Methodology 3:Analyze properties of the solution. • For each point , there is a shortest path from to : • Recall: Prefix of any shortest path is a shortest path of . • So if we’ve found , then updating ’s neighbors’ values finds shortest path of . • Solved if we update in this order  • Issue: We don’t know what these ’sare. • Solution: We update the whole graph • i.e. update ’s values for all .

  48. Bellman-Ford’s algorithm • and for all • fortimes foreach , if (1) (2)

  49. Execution on an example

  50. Correctness: suppose no negative cycle • For each point , there is a shortest path from to : • [Claim] After steps, we have // by induction • [Claim] • because is updated only based on paths found so far. • Thus after steps, the value .

More Related