Chapter 14 Graph Algorithms

Slides:



Advertisements
Similar presentations
© 2004 Goodrich, Tamassia Minimum Spanning Trees1 JFK BOS MIA ORD LAX DFW SFO BWI PVD
Advertisements

© 2004 Goodrich, Tamassia Depth-First Search1 DB A C E.
© 2004 Goodrich, Tamassia Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO.
Directed Graphs Directed Graphs Shortest Path 4/10/ :45 AM BOS
Depth-First Search1 Part-H2 Depth-First Search DB A C E.
Graphs – Depth First Search ORD DFW SFO LAX
© 2004 Goodrich, Tamassia Breadth-First Search1 CB A E D L0L0 L1L1 F L2L2.
Depth-First Search1 DB A C E. 2 Outline and Reading Definitions (§6.1) Subgraph Connectivity Spanning trees and forests Depth-first search (§6.3.1) Algorithm.
© 2004 Goodrich, Tamassia Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO.
© 2004 Goodrich, Tamassia Depth-First Search1 DB A C E.
1 Directed Graphs CSC401 – Analysis of Algorithms Lecture Notes 15 Directed Graphs Objectives: Introduce directed graphs and weighted graphs Present algorithms.
Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO. Directed Graphs2 Outline and Reading (§6.4) Reachability (§6.4.1) Directed DFS Strong connectivity Transitive.
Minimum Spanning Trees1 JFK BOS MIA ORD LAX DFW SFO BWI PVD
Minimum Spanning Trees1 JFK BOS MIA ORD LAX DFW SFO BWI PVD
GRAPHS 1. Outline 2  Undirected Graphs and Directed Graphs  Depth-First Search  Breadth-First Search.
© 2010 Goodrich, Tamassia Minimum Spanning Trees1 JFK BOS MIA ORD LAX DFW SFO BWI PVD
Depth-First Search1 DB A C E. 2 Depth-first search (DFS) is a general technique for traversing a graph A DFS traversal of a graph G – Visits all the vertices.
1 Subgraphs A subgraph S of a graph G is a graph such that The vertices of S are a subset of the vertices of G The edges of S are a subset of the edges.
CHAPTER 13 GRAPH ALGORITHMS ACKNOWLEDGEMENT: THESE SLIDES ARE ADAPTED FROM SLIDES PROVIDED WITH DATA STRUCTURES AND ALGORITHMS IN C++, GOODRICH, TAMASSIA.
CHAPTER 13 GRAPH ALGORITHMS ACKNOWLEDGEMENT: THESE SLIDES ARE ADAPTED FROM SLIDES PROVIDED WITH DATA STRUCTURES AND ALGORITHMS IN C++, GOODRICH, TAMASSIA.
Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO. Directed Graphs2 Outline and Reading (§12.4) Reachability (§12.4.1) Directed DFS Strong connectivity Transitive.
© 2010 Goodrich, Tamassia Minimum Spanning Trees1 JFK BOS MIA ORD LAX DFW SFO BWI PVD
© 2010 Goodrich, Tamassia Breadth-First Search1 CB A E D L0L0 L1L1 F L2L2.
Graphs ORD SFO LAX DFW Graphs 1 Graphs Graphs
Breadth-First Search L0 L1 L2
Graphs 10/24/2017 6:47 AM Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia, and.
Directed Graphs Directed Graphs Shortest Path 12/7/2017 7:10 AM BOS
Shortest Paths C B A E D F Shortest Paths
Directed Graphs 12/7/2017 7:15 AM Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia,
14 Graph Algorithms Hongfei Yan June 8, 2016.
COMP9024: Data Structures and Algorithms
Minimum Spanning Trees
Minimum Spanning Trees
Minimum Spanning Trees
Shortest Paths C B A E D F Shortest Paths 1
Minimum Spanning Trees
Searching Graphs ORD SFO LAX DFW Spring 2007
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Breadth-First Search L0 L1 L2
COMP9024: Data Structures and Algorithms
COMP9024: Data Structures and Algorithms
Directed Graphs 9/20/2018 1:45 AM Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia,
Minimum Spanning Tree 11/3/ :04 AM Minimum Spanning Tree
Directed Graphs 5/1/15 12:25:22 PM
Directed Graphs Directed Graphs 1 Shortest Path Shortest Path
Shortest Paths C B A E D F
Graphs Part 1.
Directed Graphs (digraphs)
Graphs.
Graphs.
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Depth-First Search D B A C E Depth-First Search Depth-First Search
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Depth-First Search D B A C E Depth-First Search Depth-First Search
Minimum Spanning Trees
Minimum Spanning Trees
Chapter 13 Graph Algorithms
Depth-First Search D B A C E Depth-First Search Depth-First Search
Minimum Spanning Tree Section 7.3: Examples {1,2,3,4}
Graphs ORD SFO LAX DFW Graphs Graphs
Searching Graphs ORD SFO LAX DFW Spring 2007
Directed Graphs Directed Graphs Directed Graphs 2/23/ :12 AM BOS
Graphs Part 1 ORD SFO LAX DFW
Copyright © Aiman Hanna All rights reserved
Depth-First Search D B A C E 4/13/2019 5:23 AM Depth-First Search
Breadth-First Search L0 L1 L2 C B A E D F 4/25/2019 3:12 AM
Minimum Spanning Trees
Breadth-First Search L0 L1 L2 C B A E D F 5/14/ :22 AM
Breadth-First Search L0 L1 L2 C B A E D F 7/28/2019 1:03 PM
Presentation transcript:

Chapter 14 Graph Algorithms ORD DFW SFO LAX 802 1743 1843 1233 337 Acknowledgement: These slides are adapted from slides provided with Data Structures and Algorithms in Java, Goodrich, Tamassia and Goldwasser (Wiley 2016) 1 1

Graphs 二○一八年九月十七日 Depth-First Search D B A C E

Depth-First Search Depth-first search (DFS) is a general technique for traversing a graph A DFS traversal of a graph 𝐺 Visits all the vertices and edges of 𝐺 Determines whether 𝐺 is connected Computes the connected components of 𝐺 Computes a spanning forest of 𝐺 DFS on a graph with 𝑛 vertices and 𝑚 edges takes 𝑂(𝑛+𝑚) time DFS can be further extended to solve other graph problems Find and report a path between two given vertices Find a cycle in the graph Depth-first search is to graphs as what Euler tour is to binary trees

DFS Algorithm from a vertex Algorithm DFS(𝐺, 𝑢) Input: A graph 𝐺 and a vertex 𝑢 of 𝐺 Output: A collection of vertices reachable from 𝑢, with their discovery edges Mark 𝑢 as visited for each edge 𝑒= 𝑢, 𝑣 ∈𝐺.outgoingEdges(𝑢) do if 𝑣 has not been visited then Record 𝑒 as a discovery edge for 𝑣 DFS(𝐺, 𝑣)

Example unexplored vertex visited vertex unexplored edge Graphs 二○一八年九月十七日 Example 𝐼(𝐵) = {𝑨, 𝐶, 𝐹} 𝐼(𝐵) = {𝐴, 𝑪, 𝐹} D B A C E F G A unexplored vertex A visited vertex unexplored edge discovery edge back edge 𝐼(𝐴) = {𝑩, 𝐶, 𝐷, 𝐸} 𝐼(𝐶) = {𝑨, 𝐵, 𝐷, 𝐸} D B A C E F G D B A C E F G Explore incident edges in order, go along the unexplored edge 1. Seeing a neighbor already explored -> check next edge 2. Reaching dead end (no more edges to explore) -> go back to parent 𝐼(𝐶) = {𝐴, 𝑩, 𝐷, 𝐸} 𝐼(𝐶) = {𝐴, 𝐵, 𝑫, 𝐸}

Example 𝐼(𝐶) = {𝐴, 𝐵, 𝑫, 𝐸} 𝐼(𝐶) = {𝐴, 𝐵, 𝐷, 𝑬} 𝐼(𝐷) = {𝑨, 𝐶} D B A C E F G D B A C E F G 𝐼(𝐷) = {𝑨, 𝐶} 𝐼(𝐸) = {𝑨, 𝐶} D B A C E F G D B A C E F G 𝐼(𝐷) = {𝐴, 𝑪} 𝐼(𝐷) = {𝐴, 𝐶} 𝐼(𝐸) = {𝐴, 𝑪} 𝐼(𝐸) = {𝐴, 𝐶}

Example 𝐼(𝐶) = {𝐴, 𝐵, 𝐷, 𝐸} 𝐼(𝐵) = {𝐴, 𝐶, 𝑭} 𝐼(𝐺) =∅ 𝐼(𝐹) = {𝐵} D B A C E F G D B A C E F G 𝐼(𝐹) = {𝐵} D B A C E F G 𝐼(𝐵) = {𝐴, 𝐶, 𝐹} 𝐼(𝐴) = {𝐴, 𝐵, 𝐶, 𝐷}

Exercise DFS Algorithm Perform DFS of the following graph, start from vertex A Assume adjacent edges are processed in alphabetical order Number vertices in the order they are visited Label edges as discovery or back edges C B A E D F

Graphs 二○一八年九月十七日 DFS and Maze Traversal The DFS algorithm is similar to a classic strategy for exploring a maze We mark each intersection, corner and dead end (vertex) visited We mark each corridor (edge) traversed We keep track of the path back to the entrance (start vertex) by means of a rope (recursion stack) Use a rope to mark the visited route. Choose an unexplored way at the intersection 1. Seeing the rope -> choose another way 2. Reaching dead end (no more ways to explore) -> go back to the last intersection

Graphs 二○一八年九月十七日 DFS Algorithm The algorithm uses a mechanism for setting and getting “labels” of vertices and edges Algorithm DFS(𝐺) Input: Graph 𝐺 Output: Labeling of the edges of 𝐺 as discovery edges and back edges for each 𝑣∈𝐺.vertices do setLabel 𝑣, 𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 for each 𝑒∈𝐺.edges do setLabel(𝑒, 𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷) if getLabel 𝑣 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then DFS(𝐺, 𝑣) Algorithm DFS(𝐺, 𝑣) Input: Graph 𝐺 and a start vertex 𝑣 Output: Labeling of the edges of 𝐺 in the connected component of 𝑣 as discovery edges and back edges setLabel(𝑣, 𝑉𝐼𝑆𝐼𝑇𝐸𝐷) for each 𝑒∈𝐺.outgoingEdges 𝑣 do if getLabel 𝑒 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷) 𝑤←𝐺.opposite(𝑣,𝑒) if getLabel 𝑤 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then setLabel(𝑒, 𝐷𝐼𝑆𝐶𝑂𝑉𝐸𝑅𝑌) DFS(𝐺, 𝑤) else setLabel(𝑒, 𝐵𝐴𝐶𝐾)

Properties of DFS v1 v2 Property 1 Property 2 DFS(𝐺, 𝑣) visits all the vertices and edges in the connected component of 𝑣 Property 2 The discovery edges labeled by DFS(𝐺, 𝑣) form a spanning tree of the connected component of 𝑣 v1 D B A C E F v2 G

Analysis of DFS Setting/getting a vertex/edge label takes 𝑂(1) time Each vertex is labeled twice once as 𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 once as 𝑉𝐼𝑆𝐼𝑇𝐸𝐷 Each edge is labeled twice once as 𝐷𝐼𝑆𝐶𝑂𝑉𝐸𝑅𝑌 or 𝐵𝐴𝐶𝐾 Function DFS(𝐺, 𝑣) and the method outgoingEdges are called once for each vertex DFS runs in 𝑂(𝑛+𝑚) time provided the graph is represented by the adjacency list structure Recall that Σ 𝑣 deg 𝑣 =2𝑚 D B A C E F G

Application Path Finding Algorithm pathDFS(𝐺, 𝑣, 𝑧) Input: Graph 𝐺, a start vertex 𝑣, a goal vertex 𝑧 Output: Path between 𝑣 and 𝑧 setLabel(𝑣, 𝑉𝐼𝑆𝐼𝑇𝐸𝐷) 𝑆.push(𝑣) if 𝑣=𝑧 then return 𝑆.elements( ) for each 𝑒∈𝐺.outgoingEdges 𝑣 do if getLabel 𝑒 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷) then 𝑤←𝐺.opposite(𝑣, 𝑒) if getLabel 𝑤 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then setLabel(𝑒, 𝐷𝐼𝑆𝐶𝑂𝑉𝐸𝑅𝑌) 𝑆.push(𝑒) pathDFS 𝐺, 𝑤 𝑆.pop( ) else setLabel(𝑒, 𝐵𝐴𝐶𝐾) We can specialize the DFS algorithm to find a path between two given vertices 𝑢 and 𝑧 using the template method pattern We call DFS(𝐺, 𝑢) with 𝑢 as the start vertex We use a stack 𝑆 to keep track of the path between the start vertex and the current vertex As soon as destination vertex 𝑧 is encountered, we return the path as the contents of the stack

Application Cycle Finding Algorithm cycleDFS(𝐺, 𝑣) Input: Graph 𝐺, a start vertex 𝑣 Output: Cycle containing 𝑣 setLabel(𝑣, 𝑉𝐼𝑆𝐼𝑇𝐸𝐷) 𝑆.push(𝑣) for each 𝑒∈𝐺.outgoingEdges 𝑣 do if getLabel 𝑒 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷) then 𝑤←𝐺.opposite(𝑣,𝑒) 𝑆.push 𝑒 if getLabel 𝑤 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then setLabel(𝑒, 𝐷𝐼𝑆𝐶𝑂𝑉𝐸𝑅𝑌) cycleDFS 𝐺, 𝑤 𝑆.pop( ) else Stack 𝑇←∅ repeat 𝑇.push(S.pop()) until 𝑇.top =𝑤 return 𝑇.elements We can specialize the DFS algorithm to find a simple cycle using the template method pattern We use a stack 𝑆 to keep track of the path between the start vertex and the current vertex As soon as a back edge 𝑣,𝑤 is encountered, we return the cycle as the portion of the stack from the top to vertex 𝑤

Directed DFS A C E B D We can specialize the traversal algorithms (DFS and BFS) to digraphs by traversing edges only along their direction In the directed DFS algorithm, we have four types of edges discovery edges back edges forward edges cross edges A directed DFS starting at a vertex 𝑠 determines the vertices reachable from 𝑠

Reachability DFS tree rooted at 𝑣: vertices reachable from 𝑣 via directed paths A C E D A C E B D F A C E B D F

Strong Connectivity Each vertex can reach all other vertices a g c d e b e f g

Strong Connectivity Algorithm Pick a vertex 𝑣 in 𝐺 Perform a DFS from 𝑣 in 𝐺 If there’s a 𝑤 not visited, print “no” Let 𝐺’ be 𝐺 with edges reversed Perform a DFS from 𝑣 in 𝐺’ Else, print “yes” Running time: 𝑂(𝑛+𝑚) c d e b f a G’: g c d e b f

Strongly Connected Components Maximal subgraphs such that each vertex can reach all other vertices in the subgraph Can also be done in 𝑂(𝑛+𝑚) time using DFS, but is more complicated (similar to biconnectivity). a d c b e f g Biconnectivity – removing any single vertex breaks connectedness { a , c , g } { f , d , e , b }

Graphs 二○一八年九月十七日 Breadth-First Search C B A E D L0 L1 F L2

Breadth-First Search Breadth-first search (BFS) is a general technique for traversing a graph A BFS traversal of a graph 𝐺 Visits all the vertices and edges of 𝐺 Determines whether 𝐺 is connected Computes the connected components of 𝐺 Computes a spanning forest of 𝐺 BFS on a graph with n vertices and m edges takes 𝑂(𝑛+𝑚) time BFS can be further extended to solve other graph problems Find and report a path with the minimum number of edges between two given vertices Find a simple cycle, if there is one

BFS Algorithm Algorithm BFS(𝐺, 𝑠) Input: Graph 𝐺, a start vertex 𝑠 List 𝐿 0 ← 𝑠 setLabel(𝑠, 𝑉𝐼𝑆𝐼𝑇𝐸𝐷) 𝑖←0 while ¬ 𝐿 𝑖 .isEmpty( ) do List 𝐿 𝑖+1 ←∅ for each 𝑣∈ 𝐿 𝑖 do for each 𝑒∈𝐺.outgoingEdges(𝑣) do if getLabel 𝑒 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then 𝑤←𝐺.opposite 𝑣, 𝑒 if getLabel 𝑤 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then setLabel(𝑒, 𝐷𝐼𝑆𝐶𝑂𝑉𝐸𝑅𝑌) setLabel(𝑤, 𝑉𝐼𝑆𝐼𝑇𝐸𝐷) 𝐿 𝑖+1 ← 𝐿 𝑖+1 ∪ 𝑤 else setLabel(𝑒, 𝐶𝑅𝑂𝑆𝑆) 𝑖←𝑖+1 The algorithm uses a mechanism for setting and getting “labels” of vertices and edges Algorithm BFS(𝐺) Input: Graph 𝐺 Output: Labeling of the edges and partition of the vertices of 𝐺 for each 𝑣∈𝐺.vertices do setLabel(𝑣, 𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷) for each 𝑒∈𝐺.edges( ) do setLabel(𝑒, 𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷) for each 𝑣∈𝐺.vertices( ) do if getLabel 𝑣 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then BFS 𝐺, 𝑣

Example unexplored vertex visited vertex unexplored edge C B A E D L0 L1 F A unexplored vertex A visited vertex unexplored edge discovery edge cross edge C B A E D L0 L1 F C B A E D L0 L1 F

Example L0 L1 L0 L1 L2 L0 L1 L2 L0 L1 L2 A C B A E D F C B A E D F C B discovery edge cross edge visited vertex A unexplored vertex unexplored edge Example C B A E D L0 L1 F C B A E D L0 L1 F L2 C B A E D L0 L1 F L2 C B A E D L0 L1 F L2

Example L0 L1 L2 L0 L1 L2 L0 L1 L2 A C B A E D F C B A E D F C B A E D discovery edge cross edge visited vertex A unexplored vertex unexplored edge Example C B A E D L0 L1 F L2 C B A E D L0 L1 F L2 C B A E D L0 L1 F L2

Exercise BFS Algorithm Perform BFS of the following graph, start from vertex A Assume adjacent edges are processed in alphabetical order Number vertices in the order they are visited and note the level they are in Label edges as discovery or cross edges C B A E D F

Properties Notation Property 1 Property 2 Property 3 L0 L1 L2 C B A E D F Notation 𝐺 𝑠 : connected component of 𝑠 Property 1 BFS(𝐺, 𝑠) visits all the vertices and edges of 𝐺 𝑠 Property 2 The discovery edges labeled by BFS 𝐺, 𝑠 form a spanning tree 𝑇 𝑠 of 𝐺 𝑠 Property 3 For each vertex 𝑣∈ 𝐿 𝑖 The path of 𝑇 𝑠 from 𝑠 to 𝑣 has 𝑖 edges Every path from 𝑠 to 𝑣 in 𝐺 𝑠 has at least 𝑖 edges C B A E D L0 L1 F L2

Analysis Setting/getting a vertex/edge label takes O(1) time Each vertex is labeled twice once as UNEXPLORED once as VISITED Each edge is labeled twice once as DISCOVERY or CROSS Each vertex is inserted once into a sequence 𝐿 𝑖 Method outgoingEdges( ) is called once for each vertex BFS runs in 𝑂 𝑛+𝑚 time provided the graph is represented by the adjacency list structure Recall that Σ 𝑣 deg 𝑣 =2𝑚

Applications Using the template method pattern, we can specialize the BFS traversal of a graph 𝐺 to solve the following problems in 𝑂 𝑛+𝑚 time Compute the connected components of 𝐺 Compute a spanning forest of 𝐺 Find a simple cycle in 𝐺, or report that 𝐺 is a forest Given two vertices of 𝐺, find a path in 𝐺 between them with the minimum number of edges, or report that no such path exists

DFS vs. BFS Applications DFS BFS DFS BFS Spanning forest, connected components, paths, cycles  Shortest paths Biconnected components C B A E D L0 L1 F L2 C B A E D F Biconnected component – the component remains connected if any vertex is removed DFS BFS

DFS vs. BFS Back edge 𝑣, 𝑤 Cross edge 𝑣, 𝑤 DFS BFS 𝑤 is an ancestor of 𝑣 in the tree of discovery edges Cross edge 𝑣, 𝑤 𝑤 is in the same level as 𝑣 or in the next level in the tree of discovery edges C B A E D L0 L1 F L2 C B A E D F DFS BFS

Topological Ordering Shortest Path 9/17/2018 11:31 AM BOS ORD JFK SFO MIA ORD LAX DFW SFO

DAGs and Topological Ordering B A D C E DAG G A directed acyclic graph (DAG) is a digraph that has no directed cycles A topological ordering of a digraph is a numbering 𝑣 1 ,…, 𝑣 𝑛 Of the vertices such that for every edge 𝑣 𝑖 , 𝑣 𝑗 , we have 𝑖<𝑗 Example: in a task scheduling digraph, a topological ordering a task sequence that satisfies the precedence constraints Theorem - A digraph admits a topological ordering if and only if it is a DAG B A D C E Topological ordering of G v1 v2 v3 v4 v5

Application Scheduling: edge (𝑎,𝑏) means task 𝑎 must be completed before 𝑏 can be started The good life ics141 ics131 ics121 ics53 ics52 ics51 ics23 ics22 ics21 ics161 ics151 ics171

Exercise Topological Sorting more c.s. write c.s. program dream about graphs play wake up eat nap study computer sci. work out sleep A typical student day bake cookies Number vertices, so that 𝑢,𝑣 in 𝐸 implies 𝑢<𝑣

Exercise Topological Sorting more c.s. write c.s. program bake cookies dream about graphs play wake up eat nap study computer sci. work out sleep A typical student day 1 2 3 4 5 6 7 8 9 10 11 Number vertices, so that 𝑢,𝑣 in 𝐸 implies 𝑢<𝑣

Algorithm for Topological Sorting Algorithm TopologicalSort 𝐺 Input: Directed Acyclic Graph (DAG) 𝐺 Output: Topological ordering of 𝐺 𝐻←𝐺 𝑛←𝐺.numVertices while ¬𝐻.isEmpty do Let 𝑣 be a vertex with no outgoing edges Label 𝑣←𝑛 𝑛←𝑛−1 𝐻.removeVertex 𝑣

Implementation with DFS Simulate the algorithm by using depth-first search 𝑂(𝑛+𝑚) time. Algorithm topologicalDFS 𝐺 Input: DAG 𝐺 Output: Topological ordering of 𝐺 𝑛←𝐺.numVertices Initialize all vertices as 𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 for each vertex 𝑣∈𝐺.vertices do if getLabel 𝑣 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then topologicalDFS 𝐺, 𝑣 Algorithm topologicalDFS 𝐺,𝑣 Input: DAG 𝐺, start vertex 𝑣 Output: Labeling of the vertices of 𝐺 in the connected component of 𝑣 setLabel(𝑣, 𝑉𝐼𝑆𝐼𝑇𝐸𝐷) for each 𝑒∈𝐺.outgoingEdges 𝑣 do 𝑤←𝐺.opposite(𝑣, 𝑒) if getLabel 𝑤 =𝑈𝑁𝐸𝑋𝑃𝐿𝑂𝑅𝐸𝐷 then //𝑒 is a discovery edge topologicalDFS 𝐺, 𝑤 else //𝑒 is a forward, cross, or back edge Label 𝑣 with topological number 𝑛 𝑛←𝑛−1

Topological Sorting Example

Topological Sorting Example 9

Topological Sorting Example 8 9

Topological Sorting Example 7 8 9

Topological Sorting Example 7 8 6 9

Topological Sorting Example 7 8 5 6 9

Topological Sorting Example 7 4 8 5 6 9

Topological Sorting Example 7 4 8 5 6 3 9

Topological Sorting Example 2 7 4 8 5 6 3 9

Topological Sorting Example 2 7 4 8 5 6 1 3 9

Minimum Spanning Trees Graphs 二○一八年九月十七日 Minimum Spanning Trees JFK BOS MIA ORD LAX DFW SFO BWI PVD 867 2704 187 1258 849 144 740 1391 184 946 1090 1121 2342 1846 621 802 1464 1235 337

Minimum Spanning Tree ORD Minimum spanning tree (MST) PIT Applications ATL STL DEN DFW DCA 10 1 9 8 6 3 2 5 7 4 Minimum spanning tree (MST) Spanning tree of a weighted graph with minimum total edge weight Applications Communications networks Transportation networks

Exercise MST Show an MST of the following graph. PVD ORD SFO LGA HNL MIA DFW SFO LAX LGA HNL 849 802 1387 1743 1843 1099 1120 1233 337 2555 142 1205

Cycle Property Cycle Property: Proof by contradiction: C C 8 4 2 3 6 7 9 e C f Cycle Property: Let 𝑇 be a minimum spanning tree of a weighted graph 𝐺 Let 𝑒 be an edge of 𝐺 that is not in 𝑇 and 𝐶 let be the cycle formed by 𝑒 with 𝑇 For every edge 𝑓 of 𝐶, 𝑤𝑒𝑖𝑔ℎ𝑡 𝑓 ≤𝑤𝑒𝑖𝑔ℎ𝑡 𝑒 Proof by contradiction: If 𝑤𝑒𝑖𝑔ℎ𝑡 𝑓 >𝑤𝑒𝑖𝑔ℎ𝑡(𝑒) we can get a spanning tree of smaller weight by replacing 𝑒 with 𝑓 Replacing f with e yields a better spanning tree 8 4 2 3 6 7 9 C e f

Partition Property Partition Property: Proof by contradition: 7 4 2 8 5 3 9 e f U V Partition Property: Consider a partition of the vertices of 𝐺 into subsets 𝑈 and 𝑉 Let 𝑒 be an edge of minimum weight across the partition There is a minimum spanning tree of G containing edge 𝑒 Proof by contradition: Let 𝑇 be an MST of 𝐺 If 𝑇 does not contain 𝑒, consider the cycle 𝐶 formed by 𝑒 with 𝑇 and let 𝑓 be an edge of 𝐶 across the partition By the cycle property, 𝑤𝑒𝑖𝑔ℎ𝑡 𝑓 ≤𝑤𝑒𝑖𝑔ℎ𝑡(𝑒) Thus, 𝑤𝑒𝑖𝑔ℎ𝑡 𝑓 =𝑤𝑒𝑖𝑔ℎ𝑡 𝑒 We obtain another MST by replacing 𝑓 with 𝑒 Replacing f with e yields another MST U V 7 4 2 8 5 3 9 e f

Prim-Jarnik’s Algorithm We pick an arbitrary vertex 𝑠 and we grow the MST as a cloud of vertices, starting from 𝑠 We store with each vertex 𝑣 a label 𝑑 𝑣 representing the smallest weight of an edge connecting 𝑣 to a vertex in the cloud At each step: We add to the cloud the vertex 𝑢 outside the cloud with the smallest distance label We update the labels of the vertices adjacent to 𝑢

Prim-Jarnik’s Algorithm Algorithm PrimJarnikMST(𝐺) Input: A weighted connected graph 𝐺 Output: A minimum spanning tree 𝑇 of 𝐺 Pick any vertex 𝑠 of 𝐺 𝐷 𝑠 ←0; 𝑃 𝑠 ←∅ for each vertex 𝑣≠𝑠 do 𝐷 𝑣 ←∞; 𝑃 𝑣 ←∅ 𝑇←∅ Priority queue 𝑄 of vertices with 𝐷[𝑣] as the key while ¬𝑄.isEmpty( ) do 𝑢←𝑄.removeMin( ) Add vertex 𝑢 and edge 𝑃[𝑢] to 𝑇 for each 𝑒∈𝑢.outgoingEdges do 𝑣←𝐺.opposite 𝑢, 𝑒 if 𝑒.weight( )<𝐷[𝑣] then 𝐷 𝑣 ←𝑒.weight( ); 𝑃 𝑣 ←𝑒 𝑄.replace 𝑣, 𝐷[𝑣] return 𝑇 An adaptable priority queue stores the vertices outside the cloud Key: distance, 𝐷[𝑣] Element: vertex 𝑣 𝑄.𝑟𝑒𝑝𝑙𝑎𝑐𝑒 𝑖, 𝑘 changes the key of an item We store three labels with each vertex 𝑣: Distance 𝐷[𝑣] Parent edge in MST 𝑃[𝑣] Locator in priority queue

Example B D C A F E 7 4 2 8 5 3 9  B D C A F E 7 4 2 8 5 3 9  B D C  B D C A F E 7 4 2 8 5 3 9  B D C A F E 7 4 2 8 5 3 9  B D C A F E 7 4 2 8 5 3 9

Example B D C A F E 7 4 2 8 5 3 9 B D C A F E 7 4 2 8 5 3 9

Exercise Prim’s MST algorithm Show how Prim’s MST algorithm works on the following graph, assuming you start with SFO Show how the MST evolves in each iteration (a separate figure for each iteration). ORD PVD MIA DFW SFO LAX LGA HNL 849 802 1387 1743 1843 1099 1120 1233 337 2555 142 1205

Analysis Graph operations Label operations Priority queue operations Method incidentEdges is called once for each vertex Label operations We set/get the distance, parent and locator labels of vertex 𝑧 𝑂 deg 𝑧 times Setting/getting a label takes 𝑂 1 time Priority queue operations Each vertex is inserted once into and removed once from the priority queue, where each insertion or removal takes 𝑂 log 𝑛 time The key of a vertex 𝑤 in the priority queue is modified at most deg 𝑤 times, where each key change takes 𝑂 log 𝑛 time Prim-Jarnik’s algorithm runs in 𝑂 𝑛+𝑚 log 𝑛 time provided the graph is represented by the adjacency list structure Recall that Σ 𝑣 deg 𝑣 =2𝑚 If the graph is connected the running time is 𝑂 𝑚 log 𝑛