Shortest Paths and Minimum Spanning Trees

Slides:



Advertisements
Similar presentations
Advanced Algorithm Design and Analysis Jiaheng Lu Renmin University of China
Advertisements

Graphs: MSTs and Shortest Paths David Kauchak cs161 Summer 2009.
More Graph Algorithms Minimum Spanning Trees, Shortest Path Algorithms.
Chapter 23 Minimum Spanning Trees
CSE 780 Algorithms Advanced Algorithms Minimum spanning tree Generic algorithm Kruskal’s algorithm Prim’s algorithm.
Greedy Algorithms Reading Material: Chapter 8 (Except Section 8.5)
Greedy Algorithms Like dynamic programming algorithms, greedy algorithms are usually designed to solve optimization problems Unlike dynamic programming.
Minimal Spanning Trees What is a minimal spanning tree (MST) and how to find one.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 223 – Advanced Data Structures Graph Algorithms: Minimum.
Theory of Computing Lecture 10 MAS 714 Hartmut Klauck.
Chapter 9 – Graphs A graph G=(V,E) – vertices and edges
Graph (II) Shortest path, Minimum spanning tree GGuy
2IL05 Data Structures Fall 2007 Lecture 13: Minimum Spanning Trees.
Spring 2015 Lecture 11: Minimum Spanning Trees
Graphs David Kauchak cs302 Spring DAGs Can represent dependency graphs underwear pants belt shirt tie jacket socks shoes watch.
Minimum spanning trees (MST) Def: A spanning tree of a graph G is an acyclic subset of edges of G connecting all vertices in G. A sub-forest of G is an.
Fundamental Data Structures and Algorithms (Spring ’05) Recitation Notes: Graphs Slides prepared by Uri Dekel, Based on recitation.
© 2007 Seth James Nielson Minimum Spanning Trees … or how to bring the world together on a budget.
Lecture 12 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
Lecture ? The Algorithms of Kruskal and Prim
Data Structures and Algorithms I Day 19, 11/3/11 Edge-Weighted Graphs
Chapter 9 : Graphs Part II (Minimum Spanning Trees)
Introduction to Algorithms
May 12th – Minimum Spanning Trees
Single-Source Shortest Paths
Minimum Spanning Trees
COMP 6/4030 ALGORITHMS Prim’s Theorem 10/26/2000.
Minimum Spanning Trees
Lecture 12 Algorithm Analysis
Introduction to Graphs
Greedy Algorithms / Minimum Spanning Tree Yin Tat Lee
Minimum Spanning Trees
Minimum-Cost Spanning Tree
Minimum Spanning Tree.
CSE373: Data Structures & Algorithms Lecture 12: Minimum Spanning Trees Catie Baker Spring 2015.
Shortest Paths.
Algorithms and Data Structures Lecture XII
CS200: Algorithm Analysis
Algorithms (2IL15) – Lecture 5 SINGLE-SOURCE SHORTEST PATHS
Minimum-Cost Spanning Tree
Data Structures – LECTURE 13 Minumum spanning trees
Chapter 23 Minimum Spanning Tree
Minimum-Cost Spanning Tree
CS 583 Analysis of Algorithms
Minimum Spanning Trees
Lecture 13 Algorithm Analysis
Lecture 13 Algorithm Analysis
Autumn 2015 Lecture 10 Minimum Spanning Trees
Lecture 12 Algorithm Analysis
CSE373: Data Structures & Algorithms Lecture 19: Spanning Trees
Minimum Spanning Tree Algorithms
Shortest Paths and Minimum Spanning Trees
CSC 413/513: Intro to Algorithms
Lecture 13 Algorithm Analysis
CSE332: Data Abstractions Lecture 18: Minimum Spanning Trees
Lecture 13 Algorithm Analysis
Minimum Spanning Tree.
Lecture 14 Shortest Path (cont’d) Minimum Spanning Tree
CS 584 Project Write up Poster session for final Due on day of final
Autumn 2016 Lecture 10 Minimum Spanning Trees
Shortest Paths.
Lecture 12 Algorithm Analysis
CS 3013: DS & Algorithms Shortest Paths.
Winter 2019 Lecture 10 Minimum Spanning Trees
Lecture 14 Minimum Spanning Tree (cont’d)
Lecture 13 Shortest Path (cont’d) Minimum Spanning Tree
Review of MST Algorithms Disjoint-Set Union Amortized Analysis
Topological Sorting Minimum Spanning Trees Shortest Path
Minimum-Cost Spanning Tree
Presentation transcript:

Shortest Paths and Minimum Spanning Trees David Kauchak cs302 Spring 2013

Admin Can resubmit homeworks 12-15 for up to half credit back Due by the end of the week Read book

3 B D 3 1 2 A 1 1 C E 4

  3 B D 3  1 2 A 1  1 C E  4

Heap A 0 B  C  D  E    3 B D 3 1 2 A 1  1 C E  4

Heap B  C  D  E    3 B D 3 1 2 A 1  1 C E  4

Heap B  C  D  E    3 B D 3 1 2 A 1  1 C E  4

Heap C 1 B  D  E    3 B D 3 1 2 A 1 1 1 C E  4

Heap C 1 B  D  E    3 B D 3 1 2 A 1 1 1 C E  4

Heap C 1 B 3 D  E  3  3 B D 3 1 2 A 1 1 1 C E  4

Heap C 1 B 3 D  E  3  3 B D 3 1 2 A 1 1 1 C E  4

Heap B 3 D  E  3  3 B D 3 1 2 A 1 1 1 C E  4

Heap B 3 D  E  3  3 B D 3 1 2 A 1 1 1 C E  4

Heap B 3 D  E  3  3 B D 3 1 2 A 1 1 1 C E  4

Heap B 2 D  E  2  3 B D 3 1 2 A 1 1 1 C E  4

Heap B 2 D  E  2  3 B D 3 1 2 A 1 1 1 C E  4

Heap B 2 E 5 D  2  3 B D 3 1 2 A 1 1 1 C E 5 4

Heap E 3 D 5 2 5 3 B D 3 1 2 A 1 1 1 C E 3 4

Heap D 5 2 5 3 B D 3 1 2 A 1 1 1 C E 3 4

Heap 2 5 3 B D 3 1 2 A 1 1 1 C E 3 4

Heap 2 5 3 B D 1 A 1 1 1 C E 3

Is Dijkstra’s algorithm correct? Invariant:

Is Dijkstra’s algorithm correct? Invariant: For every vertex removed from the heap, dist[v] is the actual shortest distance from s to v proof?

Is Dijkstra’s algorithm correct? Invariant: For every vertex removed from the heap, dist[v] is the actual shortest distance from s to v The only time a vertex gets visited is when the distance from s to that vertex is smaller than the distance to any remaining vertex Therefore, there cannot be any other path that hasn’t been visited already that would result in a shorter path

Running time?

Running time? 1 call to MakeHeap

Running time? |V| iterations

Running time? |V| calls

Running time? O(|E|) calls

Running time? Depends on the heap implementation 1 MakeHeap |V| ExtractMin |E| DecreaseKey Total Array O(|V|) O(|V|2) O(|E|) O(|V|2) Bin heap O(|V|) O(|V| log |V|) O(|E| log |V|) O((|V|+|E|) log |V|) O(|E| log |V|)

Running time? Depends on the heap implementation 1 MakeHeap |V| ExtractMin |E| DecreaseKey Total Array O(|V|) O(|V|2) O(|E|) O(|V|2) Bin heap O(|V|) O(|V| log |V|) O(|E| log |V|) O((|V|+|E|) log |V|) O(|E| log |V|) Is this an improvement? If |E| < |V|2 / log |V|

Running time? Depends on the heap implementation 1 MakeHeap |V| ExtractMin |E| DecreaseKey Total Array O(|V|) O(|V|2) O(|E|) O(|V|2) Bin heap O(|V|) O(|V| log |V|) O(|E| log |V|) O((|V|+|E|) log |V|) O(|E| log |V|) Fib heap O(|V|) O(|V| log |V|) O(|E|) O(|V| log |V| + |E|)

What about Dijkstra’s on…? 1 B D 1 5 A 10 -10 E C

What about Dijkstra’s on…? Dijkstra’s algorithm only works for positive edge weights 1 B D 1 5 A 10 E C

Bounding the distance Another invariant: For each vertex v, dist[v] is an upper bound on the actual shortest distance Is this a valid invariant?

Bounding the distance Another invariant: For each vertex v, dist[v] is an upper bound on the actual shortest distance start off at  only update the value if we find a shorter distance An update procedure

Can we ever go wrong applying this update rule? We can apply this rule as many times as we want and will never underestimate dist[v] When will dist[v] be right? If u is along the shortest path to v and dist[u] is correct

Consider the shortest path from s to v dist[v] will be right if u is along the shortest path to v and dist[u] is correct Consider the shortest path from s to v s p1 p2 p3 pk v

What happens if we update all of the vertices with the above update? dist[v] will be right if u is along the shortest path to v and dist[u] is correct What happens if we update all of the vertices with the above update? s p1 p2 p3 pk v

What happens if we update all of the vertices with the above update? dist[v] will be right if u is along the shortest path to v and dist[u] is correct What happens if we update all of the vertices with the above update? s p1 p2 p3 pk v correct

What happens if we update all of the vertices with the above update? dist[v] will be right if u is along the shortest path to v and dist[u] is correct What happens if we update all of the vertices with the above update? s p1 p2 p3 pk v correct correct

Does the order that we update the vertices matter? dist[v] will be right if u is along the shortest path to v and dist[u] is correct Does the order that we update the vertices matter? yes! If we did it in the order of the correct path, we’d be done. s p1 p2 p3 pk v correct correct

dist[v] will be right if u is along the shortest path to v and dist[u] is correct How many times do we have to do this for vertex pi to have the correct shortest path from s? i times s p1 p2 p3 pk v

dist[v] will be right if u is along the shortest path to v and dist[u] is correct How many times do we have to do this for vertex pi to have the correct shortest path from s? i times s p1 p2 p3 pk v correct correct

dist[v] will be right if u is along the shortest path to v and dist[u] is correct How many times do we have to do this for vertex pi to have the correct shortest path from s? i times s p1 p2 p3 pk v correct correct correct

dist[v] will be right if u is along the shortest path to v and dist[u] is correct How many times do we have to do this for vertex pi to have the correct shortest path from s? i times s p1 p2 p3 pk v correct correct correct correct

dist[v] will be right if u is along the shortest path to v and dist[u] is correct How many times do we have to do this for vertex pi to have the correct shortest path from s? i times s p1 p2 p3 pk v … correct correct correct correct

dist[v] will be right if u is along the shortest path to v and dist[u] is correct What is the longest (vertex-wise) the path from s to any node v can be? |V| - 1 edges/vertices s p1 p2 p3 pk v … correct correct correct correct

Bellman-Ford algorithm

Bellman-Ford algorithm Initialize all the distances do it |V| -1 times iterate over all edges/vertices and apply update rule

Bellman-Ford algorithm check for negative cycles

Negative cycles What is the shortest path from a to e? B D A E C 1 1 5 10 -10 E C 3

Bellman-Ford algorithm

Bellman-Ford algorithm 10 How many edges is the shortest path from s to: S A 8 1 -4 B G A: 2 1 1 -2 C F 3 -1 E D -1

Bellman-Ford algorithm 10 How many edges is the shortest path from s to: S A 8 1 -4 B G A: 3 2 1 1 -2 C F 3 -1 E D -1

Bellman-Ford algorithm 10 How many edges is the shortest path from s to: S A 8 1 -4 B G A: 3 2 1 1 B: -2 C F 3 -1 E D -1

Bellman-Ford algorithm 10 How many edges is the shortest path from s to: S A 8 1 -4 B G A: 3 2 1 1 B: 5 -2 C F 3 -1 E D -1

Bellman-Ford algorithm 10 How many edges is the shortest path from s to: S A 8 1 -4 B G A: 3 2 1 1 B: 5 -2 C F 3 -1 D: E D -1

Bellman-Ford algorithm 10 How many edges is the shortest path from s to: S A 8 1 -4 B G A: 3 2 1 1 B: 5 -2 C F 3 -1 D: 7 E D -1

Bellman-Ford algorithm  10 S A Iteration: 0 8 1  -4 B  G 2 1 1 -2 C  F  3 -1 E D -1  

Bellman-Ford algorithm 10 10 S A Iteration: 1 8 1  -4 B 8 G 2 1 1 -2 C  F  3 -1 E D -1  

Bellman-Ford algorithm 10 10 S A Iteration: 2 8 1  -4 B 8 G 2 1 1 -2 C  F 9 3 -1 E D -1  12

Bellman-Ford algorithm 5 10 S A Iteration: 3 8 1 10 -4 B A has the correct distance and path 8 G 2 1 1 -2 C  F 9 3 -1 E D -1  8

Bellman-Ford algorithm 5 10 S A Iteration: 4 8 1 6 -4 B 8 G 2 1 1 -2 C 11 F 9 3 -1 E D -1  7

Bellman-Ford algorithm 5 10 S A Iteration: 5 8 1 5 -4 B B has the correct distance and path 8 G 2 1 1 -2 C 7 F 9 3 -1 E D -1 14 7

Bellman-Ford algorithm 5 10 S A Iteration: 6 8 1 5 -4 B 8 G 2 1 1 -2 C 6 F 9 3 -1 E D -1 10 7

Bellman-Ford algorithm 5 10 S A Iteration: 7 8 1 5 -4 B D (and all other nodes) have the correct distance and path 8 G 2 1 1 -2 C 6 F 9 3 -1 E D -1 9 7

Correctness of Bellman-Ford Loop invariant:

Correctness of Bellman-Ford Loop invariant: After iteration i, all vertices with shortest paths from s of length i edges or less have correct distances

Runtime of Bellman-Ford O(|V| |E|)

Runtime of Bellman-Ford Can you modify the algorithm to run faster (in some circumstances)?

Single source shortest paths All of the shortest path algorithms we’ve looked at today are call “single source shortest paths” algorithms Why?

All pairs shortest paths Simple approach Call Bellman-Ford |V| times O(|V|2 |E|) Floyd-Warshall – Θ(|V|3) Johnson’s algorithm – O(|V|2 log |V| + |V| |E|)

Minimum spanning trees What is the lowest weight set of edges that connects all vertices of an undirected graph with positive weights Input: An undirected, positive weight graph, G=(V,E) Output: A tree T=(V,E’) where E’  E that minimizes

MST example 1 A C E 3 4 4 2 5 4 B D F 4 6 1 A C E 4 2 5 4 B D F

MSTs Can an MST have a cycle? 1 A C E 4 2 5 4 B D F 4

MSTs Can an MST have a cycle? 1 A C E 4 2 5 4 B D F

Applications? Connectivity Networks (e.g. communications) Circuit design/wiring hub/spoke models (e.g. flights, transportation) Traveling salesman problem? MST is a lower bound on TSP. 2 * MST is one approximate solution to the TSP problem.

Algorithm ideas? 1 A C E 3 4 4 2 5 4 B D F 4 6 1 A C E 4 2 5 4 B D F

Cuts A cut is a partitioning of the vertices into two sets S and V-S An edge “crosses” the cut if it connects a vertex uV and vV-S 1 A C E 3 4 4 2 5 4 B D F 4 6

Minimum cut property Prove this! Given a partion S, let edge e be the minimum cost edge that crosses the partition. Every minimum spanning tree contains edge e. Prove this! 1 A C E 3 4 4 2 5 4 B D F 4 6

Minimum cut property Given a partion S, let edge e be the minimum cost edge that crosses the partition. Every minimum spanning tree contains edge e. S V-S e e’ Consider an MST with edge e’ that is not the minimum edge

Minimum cut property Given a partion S, let edge e be the minimum cost edge that crosses the partition. Every minimum spanning tree contains edge e. S V-S e e’ Using e instead of e’, still connects the graph, but produces a tree with smaller weights

Kruskal’s algorithm Given a partition S, let edge e be the minimum cost edge that crosses the partition. Every minimum spanning tree contains edge e.

MST G Kruskal’s algorithm Add smallest edge that connects two sets not already connected 1 A C E 3 4 5 4 2 4 MST B D F 4 6 A C E G B D F

MST G Kruskal’s algorithm Add smallest edge that connects two sets not already connected 1 A C E 3 4 5 4 2 4 MST B D F 1 4 6 A C E G B D F

MST G Kruskal’s algorithm Add smallest edge that connects two sets not already connected 1 A C E 3 4 5 4 2 4 MST B D F 1 4 6 A C E G 2 B D F

MST G Kruskal’s algorithm Add smallest edge that connects two sets not already connected 1 A C E 3 4 5 4 2 4 MST B D F 1 4 6 A C E G 2 4 B D F

MST G Kruskal’s algorithm Add smallest edge that connects two sets not already connected 1 A C E 3 4 4 2 5 4 MST B D F 1 4 6 A C E G 4 2 4 B D F

MST G Kruskal’s algorithm Add smallest edge that connects two sets not already connected 1 A C E 3 4 4 2 5 4 MST B D F 1 4 6 A C E G 4 2 5 4 B D F

Correctness of Kruskal’s Never adds an edge that connects already connected vertices Always adds lowest cost edge to connect two sets. By min cut property, that edge must be part of the MST

Running time of Kruskal’s

Running time of Kruskal’s |V| calls to MakeSet O(|E| log |E|) 2 |E| calls to FindSet |V| calls to Union

Running time of Kruskal’s Disjoint set data structure O(|E| log |E|) + MakeSet FindSet |E| calls Union |V| calls Total |V| O(|V| |E|) |V| O(|V||E| + |E| log |E|) Linked lists O(|V| |E|) |V| O(|E| log |V|) |V| O(|E| log |V|+ |E| log |E|) Linked lists + heuristics O(|E| log |E| )

Prim’s algorithm

Prim’s algorithm

Prim’s algorithm

Prim’s algorithm Start at some root node and build out the MST by adding the lowest weighted edge at the frontier

Prim’s 1 A C E 3 4 5 MST 4 2 4 B D F A C E 4 6 B D F

Prim’s 1 A C E 3 4 5 MST 4 2 4    B D F A C E 4 6 B D F  

Prim’s 1 A C E 3 4 5 MST 4 2 4 5  4 B D F A C E 4 6 B D F  6

Prim’s 1 A C E 3 4 5 MST 4 2 4 5  4 B D F A C E 4 6 B D F  6

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Prim’s 1 A C E 3 4 5 MST 4 2 4 5 1 4 B D F A C E 4 6 B D F 4 2

Correctness of Prim’s? Can we use the min-cut property? Given a partion S, let edge e be the minimum cost edge that crosses the partition. Every minimum spanning tree contains edge e. Let S be the set of vertices visited so far The only time we add a new edge is if it’s the lowest weight edge from S to V-S

Running time of Prim’s

Running time of Prim’s Θ(|V|) Θ(|V|) |V| calls to Extract-Min |E| calls to Decrease-Key

Running time of Prim’s Same as Dijksta’s algorithm 1 MakeHeap |V| ExtractMin |E| DecreaseKey Total Array O(|V|) O(|V|2) O(|E|) O(|V|2) Bin heap O(|V|) O(|V| log |V|) O(|E| log |V|) O((|V|+|E|) log |V|) O(|E| log |V|) Fib heap O(|V|) O(|V| log |V|) O(|E|) O(|V| log |V| + |E|) Kruskal’s: O(|E| log |E| )