Directed Graphs (Digraphs) and Graphs

Similar documents
Contents Lecture 4. Greedy graph algorithms Dijkstra s algorithm Prim s algorithm Kruskal s algorithm Union-find data structure with path compression

Discrete Wiskunde II. Lecture 5: Shortest Paths & Spanning Trees

Single Source Shortest Paths

Breadth-First Search of Graphs

CMPS 6610 Fall 2018 Shortest Paths Carola Wenk

Ngày 20 tháng 7 năm Discrete Optimization Graphs

Preliminaries and Complexity Theory

Undirected Graphs. V = { 1, 2, 3, 4, 5, 6, 7, 8 } E = { 1-2, 1-3, 2-3, 2-4, 2-5, 3-5, 3-7, 3-8, 4-5, 5-6 } n = 8 m = 11

Breadth First Search, Dijkstra s Algorithm for Shortest Paths

Space Complexity of Algorithms

Preliminaries. Graphs. E : set of edges (arcs) (Undirected) Graph : (i, j) = (j, i) (edges) V = {1, 2, 3, 4, 5}, E = {(1, 3), (3, 2), (2, 4)}

NP and Computational Intractability

Single Source Shortest Paths

Dijkstra s Single Source Shortest Path Algorithm. Andreas Klappenecker

CS 410/584, Algorithm Design & Analysis: Lecture Notes 3

Data selection. Lower complexity bound for sorting

CHAPTER 1. Relations. 1. Relations and Their Properties. Discussion

Trees. A tree is a graph which is. (a) Connected and. (b) has no cycles (acyclic).

Discrete Optimization 2010 Lecture 2 Matroids & Shortest Paths

Algorithms and Theory of Computation. Lecture 2: Big-O Notation Graph Algorithms

Shortest Path Algorithms

GRAPH ALGORITHMS Week 3 (16-21 October 2017)

Section Summary. Relations and Functions Properties of Relations. Combining Relations

8.5 Sequencing Problems

Part V. Matchings. Matching. 19 Augmenting Paths for Matchings. 18 Bipartite Matching via Flows

CS 6301 PROGRAMMING AND DATA STRUCTURE II Dept of CSE/IT UNIT V GRAPHS

Branch-and-Bound for the Travelling Salesman Problem

Definition: A binary relation R from a set A to a set B is a subset R A B. Example:

ICS 252 Introduction to Computer Design

Algorithm Design and Analysis

Chapter 5 Data Structures Algorithm Theory WS 2017/18 Fabian Kuhn

8. INTRACTABILITY I. Lecture slides by Kevin Wayne Copyright 2005 Pearson-Addison Wesley. Last updated on 2/6/18 2:16 AM

Non-context-Free Languages. CS215, Lecture 5 c

Chapter 7 Network Flow Problems, I

INF2220: algorithms and data structures Series 1

(c) Give a proof of or a counterexample to the following statement: (3n 2)= n(3n 1) 2

Chapter 9: Relations Relations

Powerful tool for sampling from complicated distributions. Many use Markov chains to model events that arise in nature.

Algorithm Design and Analysis

Divide-and-Conquer Algorithms Part Two

Analysis of Algorithms. Outline. Single Source Shortest Path. Andres Mendez-Vazquez. November 9, Notes. Notes

Binary Search Trees. Motivation

Relations Graphical View

Nonnegative Matrices I

Graph G = (V, E). V ={vertices}, E={edges}. V={a,b,c,d,e,f,g,h,k} E={(a,b),(a,g),( a,h),(a,k),(b,c),(b,k),...,(h,k)}

Dynamic Programming: Shortest Paths and DFA to Reg Exps

CSCE 750 Final Exam Answer Key Wednesday December 7, 2005

Solution suggestions for examination of Logic, Algorithms and Data Structures,

CMPS 2200 Fall Carola Wenk Slides courtesy of Charles Leiserson with small changes by Carola Wenk. 10/8/12 CMPS 2200 Intro.

Algorithms: Lecture 12. Chalmers University of Technology

Data Structures for Disjoint Sets

Algorithms and Theory of Computation. Lecture 22: NP-Completeness (2)

Dynamic Programming: Shortest Paths and DFA to Reg Exps

Data Structures and Algorithms(7)

Assignment 5: Solutions

2 GRAPH AND NETWORK OPTIMIZATION. E. Amaldi Introduction to Operations Research Politecnico Milano 1

Linear-Time Algorithms for Finding Tucker Submatrices and Lekkerkerker-Boland Subgraphs

Rela%ons and Their Proper%es. Slides by A. Bloomfield

8 Priority Queues. 8 Priority Queues. Prim s Minimum Spanning Tree Algorithm. Dijkstra s Shortest Path Algorithm

Social Network Notation

Analysis of Algorithms. Outline 1 Introduction Basic Definitions Ordered Trees. Fibonacci Heaps. Andres Mendez-Vazquez. October 29, Notes.

Combinatorial Optimization

Martin Milanič

CS 301: Complexity of Algorithms (Term I 2008) Alex Tiskin Harald Räcke. Hamiltonian Cycle. 8.5 Sequencing Problems. Directed Hamiltonian Cycle

Chapter 8. NP and Computational Intractability

Sorting Algorithms. We have already seen: Selection-sort Insertion-sort Heap-sort. We will see: Bubble-sort Merge-sort Quick-sort

ne a priority queue for the nodes of G; ile (! PQ.is empty( )) select u PQ with d(u) minimal and remove it; I Informatik 1 Kurt Mehlhorn

The Tutte polynomial of a graph, depth-first search, and simplicial complex partitions

Maximum flow problem (part I)

Question Paper Code :

Introduction to Algorithms

Advanced Implementations of Tables: Balanced Search Trees and Hashing

1 Some loose ends from last time

2. ALGORITHM ANALYSIS

Introduction to Algorithms

16. Binary Search Trees. [Ottman/Widmayer, Kap. 5.1, Cormen et al, Kap ]

Fundamental Algorithms 11

IS 709/809: Computational Methods in IS Research Fall Exam Review

ENS Lyon Camp. Day 2. Basic group. Cartesian Tree. 26 October

Notes. Relations. Introduction. Notes. Relations. Notes. Definition. Example. Slides by Christopher M. Bourke Instructor: Berthe Y.

Lecture 11. Single-Source Shortest Paths All-Pairs Shortest Paths

CS 4407 Algorithms Lecture: Shortest Path Algorithms

NATIONAL UNIVERSITY OF SINGAPORE CS3230 DESIGN AND ANALYSIS OF ALGORITHMS SEMESTER II: Time Allowed 2 Hours

8.5 Sequencing Problems. Chapter 8. NP and Computational Intractability. Hamiltonian Cycle. Hamiltonian Cycle

Graph Search Howie Choset

6.842 Randomness and Computation February 24, Lecture 6

arxiv: v1 [math.co] 10 Sep 2010

Algorithms Booklet. 1 Graph Searching. 1.1 Breadth First Search

CSC 1700 Analysis of Algorithms: Warshall s and Floyd s algorithms

Binary Decision Diagrams

Solutions. Prelim 2[Solutions]

Prelim 2[Solutions] Solutions. 1. Short Answer [18 pts]

LIMITING PROBABILITY TRANSITION MATRIX OF A CONDENSED FIBONACCI TREE

Design and Analysis of Algorithms

CS361 Homework #3 Solutions

EECS 495: Randomized Algorithms Lecture 14 Random Walks. j p ij = 1. Pr[X t+1 = j X 0 = i 0,..., X t 1 = i t 1, X t = i] = Pr[X t+

Out-colourings of Digraphs

All-Pairs Shortest Paths

CS60007 Algorithm Design and Analysis 2018 Assignment 1

CS Data Structures and Algorithm Analysis

Transcription:

Directed Graphs (Digraphs) and Graphs Definitions Graph ADT Traversal algorithms DFS Lecturer: Georgy Gimel farb COMPSCI 220 Algorithms and Data Structures 1 / 74

1 Basic definitions 2 Digraph Representation and Data Structures 3 Digraph ADT Operations 4 Graph Traversals and Applications 5 Depth-first Search in Digraphs 2 / 74

Graphs in Life: World Air Roures http://milenomics.com/2014/05/partners-alliances-partner-awards/ 3 / 74

Graphs in Life: Global Internet Connections http://www.opte.org/maps/ 4 / 74

Graphs in Life: Social Networks (Facebook) http://robotmonkeys.net/wp-content/uploads/2010/12/social-nets-then-and-now-fb-cities-airlines-data.jpg 5 / 74

Directed Graph, or Digraph: Definition A digraph G = (V, E) is a finite nonempty set V of nodes together with a (possibly empty) set E of ordered pairs of nodes of G called arcs. V = { 0, 1, 2, 3, 4, 5, 6 } E = { (0, 1), (0, 3), (1, 2), (2, 0), (2, 5), (2, 6), (3, 1), (4, 0), (4, 3), (4, 5), (5, 3), (5, 6), (6, 5) } ) Set E is a neighbourhood, or adjacency relation on V. 6 / 74

Digraph: Relations of Nodes If (u, v) E, v is adjacent to u; v is an out-neighbour of u, and u is an in-neighbour of v. Examples: Nodes (points) 1 and 3 are adjacent to 0. 1 and 3 are out-neighbours of 0. 0 is an in-neighbour of 1 and 3. Node 1 is adjacent to 3. 1 is an out-neighbour of 3. 3 is an in-neighbour of 1.... 5 is an out-neighbour of 2, 4, and 6. v u out-neighbour of u in-neighbour of v 7 / 74

(Undirected) Graph: Definition A graph G = (V, E) is a finite nonempty set V of vertices together with a (possibly empty) set E of unordered pairs of vertices of G called edges. V = { a, b, c, d, e, f, g, h } E = { {a, b}, {a, d}, {b, d}, {b, c}, {c, d}, {d, f}, {d, h} {f, h}, {e, g} } ) The symmetric digraph: each arc (u, v) has the opposite arc (v, u). Such a pair is reduced into a single undirected edge that can be traversed in either direction. 8 / 74

Order, Size, and In- / Out-degree The order of a digraph G = (V, E) is the number of nodes, n = V. The size of a digraph G = (V, E) is the number of arcs, m = E. Sparse digraphs: E O(n) Dense digraphs: E Θ(n 2 ) For a given n, m = 0 n(n 1) The in-degree or out-degree of a node v is the number of arcs entering or leaving v, respectively. A node of in-degree 0 a source. A node of out-degree 0 a sink. This example: the order V = 6 and the size E = 9. Source Sink 9 / 74

Order, Size, and In- / Out-degree The order of a digraph G = (V, E) is the number of nodes, n = V. The size of a digraph G = (V, E) is the number of arcs, m = E. Sparse digraphs: E O(n) Dense digraphs: E Θ(n 2 ) For a given n, m = 0 n(n 1) The in-degree or out-degree of a node v is the number of arcs entering or leaving v, respectively. A node of in-degree 0 a source. A node of out-degree 0 a sink. This example: the order V = 6 and the size E = 9. Source Sink 9 / 74

Order, Size, and In- / Out-degree The order of a digraph G = (V, E) is the number of nodes, n = V. The size of a digraph G = (V, E) is the number of arcs, m = E. Sparse digraphs: E O(n) Dense digraphs: E Θ(n 2 ) For a given n, m = 0 n(n 1) The in-degree or out-degree of a node v is the number of arcs entering or leaving v, respectively. A node of in-degree 0 a source. A node of out-degree 0 a sink. This example: the order V = 6 and the size E = 9. Source Sink 9 / 74

Walk, Path, and Cycle A walk in a digraph G = (V, E): a sequence of nodes v 0 v 1... v n, such that (v i, v i+1 ) is an arc in G, i.e., (v i, v i+1 ) E, for each i; 0 i < n. The length of the walk v 0 v 1... v n is the number n of arcs involved. A path is a walk, in which no node is repeated. A cycle is a walk, in which v 0 = v n and no other nodes are repeated. By convention, a cycle in a graph is of length at least 3. It is easily shown that if there is a walk from u to v, then there is at least one path from u to v. 10 / 74

Walk, Path, and Cycle A walk in a digraph G = (V, E): a sequence of nodes v 0 v 1... v n, such that (v i, v i+1 ) is an arc in G, i.e., (v i, v i+1 ) E, for each i; 0 i < n. The length of the walk v 0 v 1... v n is the number n of arcs involved. A path is a walk, in which no node is repeated. A cycle is a walk, in which v 0 = v n and no other nodes are repeated. By convention, a cycle in a graph is of length at least 3. It is easily shown that if there is a walk from u to v, then there is at least one path from u to v. 10 / 74

Walk, Path, and Cycle A walk in a digraph G = (V, E): a sequence of nodes v 0 v 1... v n, such that (v i, v i+1 ) is an arc in G, i.e., (v i, v i+1 ) E, for each i; 0 i < n. The length of the walk v 0 v 1... v n is the number n of arcs involved. A path is a walk, in which no node is repeated. A cycle is a walk, in which v 0 = v n and no other nodes are repeated. By convention, a cycle in a graph is of length at least 3. It is easily shown that if there is a walk from u to v, then there is at least one path from u to v. 10 / 74

Walks, Paths, and Cycles in a Digraph: an Example 0 4 5 1 3 2 6 Sequence Walk? Path? Cycle? 0 2 3 no no no 3 1 2 yes yes no 1 2 6 5 3 1 yes no yes 4 5 6 5 yes no no 4 3 5 no no no 11 / 74

Walks, Paths, and Cycles in a Digraph: an Example 0 4 5 1 3 2 6 Sequence Walk? Path? Cycle? 0 2 3 no no no 3 1 2 yes yes no 1 2 6 5 3 1 yes no yes 4 5 6 5 yes no no 4 3 5 no no no 11 / 74

Walks, Paths, and Cycles in a Digraph: an Example 0 4 5 1 3 2 6 Sequence Walk? Path? Cycle? 0 2 3 no no no 3 1 2 yes yes no 1 2 6 5 3 1 yes no yes 4 5 6 5 yes no no 4 3 5 no no no 11 / 74

Walks, Paths, and Cycles in a Digraph: an Example 0 4 5 1 3 2 6 Sequence Walk? Path? Cycle? 0 2 3 no no no 3 1 2 yes yes no 1 2 6 5 3 1 yes no yes 4 5 6 5 yes no no 4 3 5 no no no 11 / 74

Walks, Paths, and Cycles in a Digraph: an Example 0 4 5 1 3 2 6 Sequence Walk? Path? Cycle? 0 2 3 no no no 3 1 2 yes yes no 1 2 6 5 3 1 yes no yes 4 5 6 5 yes no no 4 3 5 no no no 11 / 74

Walks, Paths, and Cycles in a Digraph: an Example 0 4 5 1 3 2 6 Sequence Walk? Path? Cycle? 0 2 3 no no no 3 1 2 yes yes no 1 2 6 5 3 1 yes no yes 4 5 6 5 yes no no 4 3 5 no no no 11 / 74

Walks, Paths, and Cycles in a Graph: an Example a e g b d h c f Sequence Walk? Path? Cycle? a b c yes yes no e g e yes no no d b c d yes no yes d a d f yes no no a b d f h yes yes no 12 / 74

Walks, Paths, and Cycles in a Graph: an Example a e g b d h c f Sequence Walk? Path? Cycle? a b c yes yes no e g e yes no no d b c d yes no yes d a d f yes no no a b d f h yes yes no 12 / 74

Walks, Paths, and Cycles in a Graph: an Example a e g b d h c f Sequence Walk? Path? Cycle? a b c yes yes no e g e yes no no d b c d yes no yes d a d f yes no no a b d f h yes yes no 12 / 74

Walks, Paths, and Cycles in a Graph: an Example a e g b d h c f Sequence Walk? Path? Cycle? a b c yes yes no e g e yes no no d b c d yes no yes d a d f yes no no a b d f h yes yes no 12 / 74

Walks, Paths, and Cycles in a Graph: an Example a e g b d h c f Sequence Walk? Path? Cycle? a b c yes yes no e g e yes no no d b c d yes no yes d a d f yes no no a b d f h yes yes no 12 / 74

Walks, Paths, and Cycles in a Graph: an Example a e g b d h c f Sequence Walk? Path? Cycle? a b c yes yes no e g e yes no no d b c d yes no yes d a d f yes no no a b d f h yes yes no 12 / 74

Digraph G = (V, E): Distances and Diameter The distance, d(u, v), from a node u to a node v in G is the minimum length of a path from u to v. If no path exists, the distance is undefined or +. For graphs, d(u, v) = d(v, u) for all vertices u and v. The diameter of G is the maximum distance max [d(u, v)] u,v V between any two vertices. The radius of G is min max u V v V [d(u, v)]. 13 / 74

Digraph G = (V, E): Distances and Diameter The distance, d(u, v), from a node u to a node v in G is the minimum length of a path from u to v. If no path exists, the distance is undefined or +. For graphs, d(u, v) = d(v, u) for all vertices u and v. The diameter of G is the maximum distance max [d(u, v)] u,v V between any two vertices. The radius of G is min max u V v V [d(u, v)]. 13 / 74

Path Distances in Digraphs: Examples 0 4 d(0, 3) = min{length of 0,3 ; length of 0,1,2,6,5,3 ; length of 0,1,2,5,3 } = min{1; 5; 4} = 1 v {}}{ 1 0 1 2 3 4 5 6 2 u=0 1 2 1 3 3 u=1 2 1 3 2 2 3 u=2 1 3 2 1 1 u=3 3 1 2 3 3 6 u=4 1 2 3 1 1 2 5 u=5 4 2 3 1 1 u=6 5 3 4 2 1 d(0, 1) = 1, d(0, 2) = 2, d(0, 5) = 3, d(0, 4) =, d(5, 5) = 0, d(5, 2) = 3, d(5, 0) = 4, d(4, 6) = 2, d(4, 1) = 2, d(4, 2) = 3 Diameter: max{1, 2, 1,, 3,..., 4,..., 5,..., 1} = Raduis: min{,,..., 3,, } = 3 14 / 74

Path Distances in Graphs: Examples a e g b d h c f v {}}{ a b c d e f g h u=a 0 1 2 1 2 2 u=b 1 0 1 1 2 2 u=c 2 1 0 1 2 2 u=d 1 1 1 0 1 1 u=e 0 1 u=f 2 2 2 1 0 1 u=g 1 0 u=h 2 2 2 1 1 0 d(a, b) = d(b, a) = 1, d(a, c) = d(c, a) = 2, d(a, f) = d(f, a) = 2, d(a, e) = d(e, a) =, d(e, e) = 0, d(e, g) = d(g, e) = 1, d(h, f) = d(f, h) = 1, d(d, h) = d(h, d) = 1 Diameter: max{0, 1, 2, 1,, 2,..., 2,..., 2,..., 0} = Radius: min{,..., } = 15 / 74

Diameter / Radius of an Unweighted Graph A C E B D A B C D E max v d(u,v) A 0 1 1 2 1 2 B 1 0 2 1 1 2 C 1 2 0 1 1 2 D 2 1 1 0 1 2 E 1 1 1 1 0 1 d(c, E) = d(e, C) = min{1, 1 + 1, 1 + 1, 1 + 1 + 1, 1 + 1 + 1} = 1 d(b, C) = d(c, B) = min{1 + 1, 1 + 1 + 1, 1 + 1, 1 + 1 + 1, 1 + 1, 1 + 1 + 1} = 2 Radius = 1; diameter = 2. 16 / 74

Diameter / Radius of a Weighted Graph A 3 1 1 B A B C D E max v d(u,v) A 0 2 2 2 1 2 2 E 5 1 2 B 2 0 4 2 1 4 C 2 4 0 3 3 4 D 2 2 3 0 1 3 C 3 D E 1 1 3 1 0 3 d(c, E) = d(e, C) = min{5, 2 + 1, 3 + 1, 2 + 3 + 1, 3 + 2 + 1} = 3 d(b, C) = d(c, B) = min{3 + 2, 1 + 1 + 2, 1 + 5, 1 + 1 + 3, 2 + 3, 2 + 1 + 5} = 4 Radius = 2; diameter = 4. 17 / 74

Underlying Graph of a Digraph The underlying graph of a digraph G = (V, E) is the graph G = (V, E ) where E = { {u, v} (u, v) E }. 1 1 0 2 0 2 3 3 4 6 4 6 5 5 18 / 74

Sub(di)graphs A subdigraph of a digraph G = (V, E) is a digraph G = (V, E ) where V V and E E. V = {0, 1, 2, 3, 4}, G = (0, 2), (1, 0), (1, 2), E = (1, 3), (3, 1), (4, 2), (3, 4) ( ) V = {1, 2, 3}, G = E = {(1, 2), (3, 1)} 19 / 74

Spanning Sub(di)graphs A spanning subdigraph contains all nodes, that is, V = V. V = {0, 1, 2, 3, 4}, G = (0, 2), (1, 0), (1, 2), E = (1, 3), (3, 1), (4, 2), (3, 4) V = {0, 1, 2, 3, 4}, G { } = (0, 2), (1, 2), E = (3, 4) 20 / 74

Induced Sub(di)graphs The subdigraph induced by a subset V of V is the digraph G = (V, E ) where E = {(u, v) E u V and v V }. V = {0, 1, 2, 3, 4}, G = (0, 2), (1, 0), (1, 2), E = (1, 3), (3, 1), (4, 2), (3, 4) V = {1, 2, 3}, G { } = (1, 2), (1, 3), E = (3, 1) 21 / 74

Digraphs: Computer Representation For a digraph G of order n with the vertices, V, labelled 0, 1,..., n 1: The adjacency matrix of G: The n n boolean matrix (often encoded with 0 s and 1 s) such that its entry (i, j) is true if and only if there is an arc (i, j) from the node i to node j. An adjacency list of G: A sequence of n sequences, L 0,..., L n 1, such that the sequence L i contains all nodes of G that are adjacent to the node i. Each sequence L i may not be sorted! But we usually sort them. 22 / 74

Digraphs: Computer Representation For a digraph G of order n with the vertices, V, labelled 0, 1,..., n 1: The adjacency matrix of G: The n n boolean matrix (often encoded with 0 s and 1 s) such that its entry (i, j) is true if and only if there is an arc (i, j) from the node i to node j. An adjacency list of G: A sequence of n sequences, L 0,..., L n 1, such that the sequence L i contains all nodes of G that are adjacent to the node i. Each sequence L i may not be sorted! But we usually sort them. 22 / 74

Adjacency Matrix of a Digraph 0 4 5 Digraph G = (V, E) 1 3 2 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 Adjacency matrix of G: 0 a non-adjacent pair of vertices: (i, j) / E 1 an adjacent pair of vertices: (i, j) E The number of 1 s in a row (column) is the out-(in-) degree of the related node. 23 / 74

Adjacency Lists of a Graph a e g b d h Graph G = (V, E) c f symbolic 0 = a: b d 1 = b: a c d 2 = c: b d 3 = d: a b c f h 4 = e: g 5 = f: d h 6 = g: e 7 = h: d f Special cases can be stored more efficiently: A complete binary tree or a heap: in an array. numeric 8 1 3 0 2 3 1 3 0 1 2 5 7 6 3 7 4 3 5 A general rooted tree: in an array pred of size n; pred[i] a pointer to the parent of node i. 24 / 74

Digraph Operations w.r.t. Data Structures Operation Adjacency Matrix Adjacency Lists arc (i, j) exists? is entry (i, j) 0 or 1 find j in list i out-degree of i scan row and sum 1 s size of list i in-degree of i scan column and sum 1 s for j i, find i in list j add arc (i, j) change entry (i, j) insert j in list i delete arc (i, j) change entry (i, j) delete j from list i add node create new row/column add new list at end delete node i delete row/column i and delete list i and for j i, shuffle other entries delete i from list j 25 / 74

Adjacency Lists / Matrices: Comparative Performance G = (V, E) n = V ; m = E Operation array/array list/list arc (i, j) exists? Θ(1) Θ(α) ) out-degree of i Θ(n) Θ(1) in-degree of i Θ(n) Θ(n + m) add arc (i, j) Θ(1) Θ(1) delete arc (i, j) Θ(1) Θ(α) add node Θ(n) Θ(1) delete node i Θ(n 2 ) Θ(n + m) ) Here, α denotes size of the adjacency list for vertex i. 26 / 74

General Graph Traversal Algorithm (Part 1) algorithm traverse Input: digraph G = (V, E) begin array colour[n], pred[n] for u V (G) do colour[u] WHITE end for for s V (G) do if colour[s] = WHITE then visit(s) end if end for return pred end Three types of nodes each stage: WHITE unvisited yet. GREY visited, but some adjacent nodes are WHITE. BLACK visited; only GREY adjacent nodes 27 / 74

General Graph Traversal Algorithm (Part 2) algorithm visit Input: node s of digraph G begin colour[s] GREY; pred[s] NULL while there is a grey node do choose a grey node u if there is a white neighbour of u choose such a neighbour v colour[v] GREY; pred[v] u else colour[u] BLACK end if end while end 28 / 74

Illustrating the General Traversal Algorithm c a initialising all nodes WHITE b e d 29 / 74

Illustrating the General Traversal Algorithm c a visit(a); colour[a] GREY e is WHITE neighbour of a: colour[e] GREY; pred[e] a b e d 30 / 74

Illustrating the General Traversal Algorithm b c a e visit(a); colour[a] GREY e is WHITE neighbour of a colour[e] GREY; pred[e] a choose GREY a: no WHITE neighbour: colour[a] BLACK d 31 / 74

Illustrating the General Traversal Algorithm b c a e visit(a); colour[a] GREY e is WHITE neighbour of a colour[e] GREY; pred[e] a choose GREY a: no WHITE neighbour: colour[a] BLACK choose GREY e: no WHITE neighbour: colour[e] BLACK d 32 / 74

Illustrating the General Traversal Algorithm bc ac visit(b); colour[b] GREY c is WHITE neighbour of b colour[c] GREY; pred[c] b ba e d 33 / 74

Illustrating the General Traversal Algorithm ba bc a c e visit(b); colour[b] GREY c is WHITE neighbour of b colour[c] GREY; pred[c] b d is WHITE neighbour of c colour[d] GREY; pred[d] c d 34 / 74

Illustrating the General Traversal Algorithm ba bc ac e visit(b); colour[b] GREY c is WHITE neighbour of b colour[c] GREY; pred[c] b d is WHITE neighbour of c colour[d] GREY; pred[d] c no more WHITE nodes: colour[d] BLACK colour[c] BLACK colour[b] BLACK d 35 / 74

Classes of Traversal Arcs Search forest F : a set of disjoint trees spanning a digraph G after its traversal. bc ac An arc (u, v) E(G) is called a tree arc if it belongs to one of the trees of F ba d e The arc (u, v), which is not a tree arc, is called: a forward arc if u is an ancestor of v in F ; a back arc if u is a descendant of v in F, and a cross arc if neither u nor v is an ancestor of the other in F. 36 / 74

Basic Facts about Traversal Trees (for further analyses) Theorem 5.2: Suppose we have run traverse on G, resulting in a search forest F. 1 If T 1 and T 2 are different trees in F and T 1 was explored before T 2, then there are no arcs from T 1 to T 2. 2 If G is a graph, then there can be no edges joining different trees of F. 3 If v, w V (G); v is visited before w, and w is reachable from v in G, then v and w belong to the same tree of F. 4 If v, w V (G) and v and w belong to the same tree T in F, then any path from v to w in G must have all nodes in T. 37 / 74

Basic Facts about Traversal Trees (for further analyses) Theorem 5.2: Suppose we have run traverse on G, resulting in a search forest F. 1 If T 1 and T 2 are different trees in F and T 1 was explored before T 2, then there are no arcs from T 1 to T 2. 2 If G is a graph, then there can be no edges joining different trees of F. 3 If v, w V (G); v is visited before w, and w is reachable from v in G, then v and w belong to the same tree of F. 4 If v, w V (G) and v and w belong to the same tree T in F, then any path from v to w in G must have all nodes in T. 37 / 74

Basic Facts about Traversal Trees (for further analyses) Theorem 5.2: Suppose we have run traverse on G, resulting in a search forest F. 1 If T 1 and T 2 are different trees in F and T 1 was explored before T 2, then there are no arcs from T 1 to T 2. 2 If G is a graph, then there can be no edges joining different trees of F. 3 If v, w V (G); v is visited before w, and w is reachable from v in G, then v and w belong to the same tree of F. 4 If v, w V (G) and v and w belong to the same tree T in F, then any path from v to w in G must have all nodes in T. 37 / 74

Basic Facts about Traversal Trees (for further analyses) Theorem 5.2: Suppose we have run traverse on G, resulting in a search forest F. 1 If T 1 and T 2 are different trees in F and T 1 was explored before T 2, then there are no arcs from T 1 to T 2. 2 If G is a graph, then there can be no edges joining different trees of F. 3 If v, w V (G); v is visited before w, and w is reachable from v in G, then v and w belong to the same tree of F. 4 If v, w V (G) and v and w belong to the same tree T in F, then any path from v to w in G must have all nodes in T. 37 / 74

Basic Facts about Traversal Trees (for further analyses) Theorem 5.2: Suppose we have run traverse on G, resulting in a search forest F. 1 If T 1 and T 2 are different trees in F and T 1 was explored before T 2, then there are no arcs from T 1 to T 2. 2 If G is a graph, then there can be no edges joining different trees of F. 3 If v, w V (G); v is visited before w, and w is reachable from v in G, then v and w belong to the same tree of F. 4 If v, w V (G) and v and w belong to the same tree T in F, then any path from v to w in G must have all nodes in T. 37 / 74

Run-time Analysis of Algorithm traverse In the while-loop of subroutine visit let: a (A) be lower (upper) time bound to choose a GREY node. b (B) be lower (upper) time bound to choose a WHITE neighbour. Given a (di)graph G = (V, E) of order n = V and size m = E, the running time of traverse is: O(An + Bm) and Ω(an + bm) with adjacency lists, and O(An + Bn 2 ) and Ω(an + bn 2 ) with an adjacency matrix. Time to find a GREY node: O(An) and Ω(an) Time to find a WHITE neighbour: O(Bm) and Ω(bm) (adjacency lists) O(Bn 2 ) and Ω(bn 2 ) (an adjacency matrix) Generally, A, B, a, b may depend on n. A more detailed analysis depends on the rules used. 38 / 74

Main Rules for Choosing Next Nodes Depth-first search (DFS): Starting at a node v. Searching as far away from v as possible via neighbours. Continue from the next neighbour until no more new nodes. Breadth-first search (BFS): Starting at a node v. Searching through all its neighbours, then through all their neighbours, etc. Continue until no more new nodes. More complicated priority-first search (PFS). 5 5 0 1 2 1 2 3 DFS 3 7 DFS 4 5 8 6 8 6 9 7 0 1 4 2 1 2 3 3 BFS 4 4 5 9 8 6 7 6 8 7 39 / 74

Depth-first Search (DFS) Algorithm (Part 1) algorithm dfs Input: digraph G = (V (G), E(G)) begin stack S; array colour[n], pred[n], seen[n], done[n] for u V (G) do colour[u] WHITE; pred[u] NULL end for time 0 for s V (G) do if colour[s] = WHITE then dfsvisit(s) end if end for return pred, seen, done end 40 / 74

Depth-first Search (DFS) Algorithm (Part 2) algorithm dfsvisit Input: node s begin colour[s] GREY; seen[s] time + +; S.push top(s) while not S.isempty() do u S.get top() if there is a v adjacent to u and colour[v] = WHITE then colour[v] GREY; pred[v] u seen[v] time + +; S.push top(v) else S.del top(); colour[u] BLACK; done[u] time + +; end if end while end 41 / 74

Recursive View of DFS Algorithm algorithm rec dfs visit Input: node s begin colour[s] GREY seen[s] time + + for each v adjacent to s do if colour[v] = WHITE then pred[v] s rec dfs visit(v) end if end for colour[s] BLACK done[s] time + + end 42 / 74

DFS: An Example (seen[v] done[v]): time = 0; 1 b c 0 a e d 43 / 74

DFS: An Example (seen[v] done[v]): time = 1; 2 1 b c 0 a e d 44 / 74

DFS: An Example (seen[v] done[v]): time = 2, 3 1 b 2 c 0 a e d 45 / 74

DFS: An Example (seen[v] done[v]): time = 3; 4 1 b 2 c 0 a e 3 d 46 / 74

DFS: An Example (seen[v] done[v]): time = 4; 5 1 b 2 c 0 a e 3 4 d 47 / 74

DFS: An Example (seen[v] done[v]: time = 5, 6 1 b 2 5 c 0 a e 3 4 d 48 / 74

DFS: An Example (seen[v] done[v]): time = 6, 7 1 b 2 5 c 0 a e 3 4 d 6 49 / 74

DFS: An Example (seen[v] done[v]): time = 7, 8 1 b 2 5 c 0 a e 3 4 d 6 7 50 / 74

DFS: An Example (seen[v] done[v]): time = 8, 9 1 8 b 2 5 c 0 a e 3 4 d 6 7 51 / 74

DFS: An Example (seen[v] done[v]): time = 9, 10 1 8 b 2 5 c 0 9 a e 3 4 d 6 7 52 / 74

Basic Properties of Depth-first Search Next GREY node chosen the last one coloured GREY thus far. Data structure for this last in, first out order a stack. Each call to dfs visit(v) terminates only when all nodes reachable from v via a path of WHITE nodes have been seen. If (v, w) is an arc, then for a tree or forward arc: seen[v] < seen[w] < done[w] < done[v] Example in Slide 52: (a, b) : 0 < 1 < 8 < 9; (b, c) : 1 < 2 < 5 < 8; (a, c) : 0 < 2 < 5 < 9; back arc: seen[w] < seen[v] < done[v] < done[w]: Example in Slide 52: (d, a) : 0 < 6 < 7 < 9; cross arc: seen[w] < done[w] < seen[v] < done[v]. Example in Slide 52: (d, e) : 3 < 4 < 6 < 7; Hence, there are no cross edges on a graph. 53 / 74

Tree, Forward, Back, and Cross Arcs (Example in Slide 52) 1 8 b 2 5 c Tree arc 0 9 a e 3 4 Forward arc Back arc Cross arc d 6 7 54 / 74

Using DFS to Determine Ancestors of a Tree Theorem 5.5 Suppose that DFS on a digraph G results in a search forest F. Let v, w V (G) and seen[v] < seen[w]. 1 If v is an ancestor of w in F, then seen[v] < seen[w] < done[w] < done[v]. 2 If v is not an ancestor of w in F, then Proof. seen[v] < done[v] < seen[w] < done[w]. 1 This part follows from the recursive nature of DFS. 2 If v is not an ancestor of w in F, then w is also not an ancestor v. Thus v is in a subtree, which was completely explored before the subtree of w. 55 / 74

DFS: seen/done: step 1 B D A 1/ C E S F Preorder (WHITE to GREY): seen A 1 Postorder (GREY to BLACK) done G H 56 / 74

DFS: seen/done: step 2 B 2/ D A 1/ C E S F Preorder (WHITE to GREY): seen A B 1 2 Postorder (GREY to BLACK) done G H 57 / 74

DFS: seen/done: step 3 B 2/3 D A 1/ C E S F Preorder (WHITE to GREY): seen A B 1 2 Postorder (GREY to BLACK) done B 3 G H 58 / 74

DFS: seen/done: step 4 B 2/3 D A 1/ C E S 4/ F Preorder (WHITE to GREY): seen A B S 1 2 4 Postorder (GREY to BLACK) done B 3 G H 59 / 74

DFS: seen/done: step 5 B 2/3 D A 1/ C 5/ E S 4/ F Preorder (WHITE to GREY): seen A B S C 1 2 4 5 Postorder (GREY to BLACK) done B 3 G H 60 / 74

DFS: seen/done: step 6 B 2/3 D 6/ A 1/ C 5/ E S 4/ F Preorder (WHITE to GREY): seen A B S C D 1 2 4 5 6 Postorder (GREY to BLACK) done B 3 G H 61 / 74

DFS: seen/done: step 7 B 2/3 D 6/7 A 1/ C 5/ E S 4/ F Preorder (WHITE to GREY): seen A B S C D 1 2 4 5 6 Postorder (GREY to BLACK) done B D 3 7 G H 62 / 74

DFS: seen/done: step 8 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ F Preorder (WHITE to GREY): seen A B S C D E 1 2 4 5 6 8 Postorder (GREY to BLACK) done B D 3 7 G H 63 / 74

DFS: seen/done: step 9 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ Preorder (WHITE to GREY): seen A B S C D E H 1 2 4 5 6 8 9 Postorder (GREY to BLACK) done B D 3 7 G F 9/ H 64 / 74

DFS: seen/done: step 10 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ 10/ G F 9/ Preorder (WHITE to GREY): seen A B S C D E H G 1 2 4 5 6 8 9 10 Postorder (GREY to BLACK) done B D 3 7 H 65 / 74

DFS: seen/done: step 11 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ 10/ G F 11/ 9/ Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D 3 7 H 66 / 74

DFS: seen/done: step 12 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ 10/ G F 11/12 9/ Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F 3 7 12 H 67 / 74

DFS: seen/done: step 13 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ 10/13 G F 11/12 9/ Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F G 3 7 12 13 H 68 / 74

DFS: seen/done: step 14 B 2/3 D 6/7 A 1/ C 5/ 8/ E S 4/ 10/13 G F 11/12 9/14 Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F G H 3 7 12 13 14 H 69 / 74

DFS: seen/done: step 15 B 2/3 D 6/7 A 1/ C 5/ 8/15 E S 4/ 10/13 G F 11/12 9/14 Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F G H E 3 7 12 13 14 15 H 70 / 74

DFS: seen/done: step 16 B 2/3 D 6/7 A 1/ C 5/16 8/15 E S 4/ 10/13 G F 11/12 9/14 Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F G H E C 3 7 12 13 14 15 16 H 71 / 74

DFS: seen/done: step 17 B 2/3 D 6/7 A 1/ C 5/16 8/15 E S 4/17 10/13 G F 11/12 9/14 Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F G H E C S 3 7 12 13 14 15 16 17 H 72 / 74

DFS: seen/done: step 18 B 2/3 D 6/7 A 1/18 C 5/16 8/15 E S 4/17 10/13 G F 11/12 9/14 Preorder (WHITE to GREY): seen A B S C D E H G F 1 2 4 5 6 8 9 10 11 Postorder (GREY to BLACK) done B D F G H E C S A 3 7 12 13 14 15 16 17 18 H 73 / 74

Determining Ancestors of a Tree: Examples B 2/3 D 6/7 A 1/18 C 5/16 8/15 E S F 4/17 10/13 11/12 9/14 G H A B : seen[a] = 1 < seen[b] = 2 < done[b] = 3 < done[a] = 18 S H : seen[s] = 4 < seen[h] = 9 < done[h] = 14 < done[s] = 17 B D : seen[b] = 2 < done[b] = 3 < seen[d] = 6 < done[d] = 7 D G : seen[d] = 6 < done[d] = 7 < seen[g] = 10 < done[g] = 13 74 / 74