SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
Lecture 12:
      Depth-First Search
         Steven Skiena

Department of Computer Science
 State University of New York
 Stony Brook, NY 11794–4400

http://www.cs.sunysb.edu/∼skiena
Problem of the Day
Prove that in a breadth-first search on a undirected graph G,
every edge in G is either a tree edge or a cross edge, where a
cross edge (x, y) is an edge where x is neither is an ancestor
or descendent of y.
Depth-First Search
DFS has a neat recursive implementation which eliminates
the need to explicitly use a stack.
Discovery and final times are a convenience to maintain.
dfs(graph *g, int v)
{
      edgenode *p; (* temporary pointer *)
      int y; (* successor vertex *)

     if (finished) return; (* allow for search termination *)

     discovered[v] = TRUE;
     time = time + 1;
     entry time[v] = time;

     process vertex early(v);

     p = g− >edges[v];
     while (p ! = NULL) {
           y = p− >y;
if (discovered[y] == FALSE) {
                 parent[y] = v;
                 process edge(v,y);
                 dfs(g,y);
          }
          else if ((!processed[y]) || (g− >directed))
                 process edge(v,y);

          if (finished) return;

          p = p− >next;
    }

    process vertex late(v);

    time = time + 1;
    exit time[v] = time;

    processed[v] = TRUE;
}
The Key Idea with DFS
A depth-first search of a graph organizes the edges of the
graph in a precise way.
In a DFS of an undirected graph, we assign a direction to each
edge, from the vertex which discover it:
                                            2
                            1                       3

                                    1
                        2       6
                                                        4

                    3
                                                5

                    4                   6



                     5
Edge Classification for DFS
Every edge is either:
                               3. A Forward Edge
    1. A Tree Edge                to a decendant




                               4. A Cross Edge
    2. A Back Edge
                                  to a different node
       to an ancestor




On any particular DFS or BFS of a directed or undirected
graph, each edge gets classified as one of the above.
Edge Classification Implementation

int edge classification(int x, int y)
{
      if (parent[y] == x) return(TREE);
      if (discovered[y] && !processed[y]) return(BACK);
      if (processed[y] && (entry time[y]¿entry time[x])) return(FORWARD);
      if (processed[y] && (entry time[y]¡entry time[x])) return(CROSS);

     printf(”Warning: unclassified edge (%d,%d)”,x,y);
}
DFS: Tree Edges and Back Edges Only
The reason DFS is so important is that it defines a very nice
ordering to the edges of the graph.
In a DFS of an undirected graph, every edge is either a tree
edge or a back edge.
Why? Suppose we have a forward edge. We would have
encountered (4, 1) when expanding 4, so this is a back edge.
                               1

                           2

                       3            4
No Cross Edges in DFS
Suppose we have a cross-edge
                        1


                    2           5   When expanding 2, we would discover
                                    5, so the tree would look like:


                3       4   6                  1


                                           2


                                    3
                                           4       5



                                                           6
DFS Application: Finding Cycles
Back edges are the key to finding a cycle in an undirected
graph.
Any back edge going from x to an ancestor y creates a cycle
with the path in the tree from y to x.
process edge(int x, int y)
{
      if (parent[x] ! = y) { (* found back edge! *)
             printf(”Cycle from %d to %d:”,y,x);
             find path(y,x,parent);
             finished = TRUE;
      }
}
Articulation Vertices
Suppose you are a terrorist, seeking to disrupt the telephone
network. Which station do you blow up?



An articulation vertex is a vertex of a connected graph whose
deletion disconnects the graph.
Clearly connectivity is an important concern in the design of
any network.
Articulation vertices can be found in O(n(m+n)) – just delete
each vertex to do a DFS on the remaining graph to see if it is
connected.
A Faster O(n + m) DFS Algorithm
In a DFS tree, a vertex v (other than the root) is an articulation
vertex iff v is not a leaf and some subtree of v has no back
edge incident until a proper ancestor of v.
                                            The root is a special case since
                                            it has no ancestors.
                           X
                                            X is an articulation vertex since
                                            the right subtree does not have
                                            a back edge to a proper ancestor.




                    Leaves cannot be
                    articulation vertices
Topological Sorting
A directed, acyclic graph has no directed cycles.
                             B               D


                      A                  E
                                 C



                      G              F




A topological sort of a graph is an ordering on the vertices so
that all edges go from left to right.
DAGs (and only DAGs) has at least one topological sort (here
G, A, B, C, F, E, D).
Applications of Topological Sorting
Topological sorting is often useful in scheduling jobs in their
proper sequence. In general, we can use it to order things
given precidence constraints.
Example: Dressing schedule from CLR.
Example: Identifying errors in DNA fragment
assembly
Certain fragments are constrained to be to the left or right of
other fragments, unless there are errors.
                                    A B R A C A D A B R A
                A   B   R   A   C
                                    A B R A C
                A   C   A   D   A       R A C A D
                A   D   A   B   R         A C A D A
                D   A   B   R   A             A D A B R
                R   A   C   A   D               D A B R A


Solution – build a DAG representing all the left-right
constraints. Any topological sort of this DAG is a consistant
ordering. If there are cycles, there must be errors.
Topological Sorting via DFS
A directed graph is a DAG if and only if no back edges are
encountered during a depth-first search.
Labeling each of the vertices in the reverse order that they are
marked processed finds a topological sort of a DAG.
Why? Consider what happens to each directed edge {x, y} as
we encounter it during the exploration of vertex x:
Case Analysis

 • If y is currently undiscovered, then we then start a DFS
   of y before we can continue with x. Thus y is marked
   completed before x is, and x appears before y in the
   topological order, as it must.
 • If y is discovered but not completed, then {x, y} is a back
   edge, which is forbidden in a DAG.
 • If y is completed, then it will have been so labeled before
   x. Therefore, x appears before y in the topological order,
   as it must.
Topological Sorting Implementation
process vertex late(int v)
{
      push(&sorted,v);
}


process edge(int x, int y)
{
      int class;

      class = edge classification(x,y);

      if (class == BACK)
             printf(”Warning: directed cycle found, not a DAG”);
}

We push each vertex on a stack soon as we have evaluated
all outgoing edges. The top vertex on the stack always has
no incoming edges from any vertex on the stack, repeatedly
popping them off yields a topological ordering.
Strongly Connected Components
A directed graph is strongly connected iff there is a directed
path between any two vertices.
The strongly connected components of a graph is a partition
of the vertices into subsets (maximal) such that each subset is
strongly connected.
                   a       b       e         f




                   c           d   g     h




Observe that no vertex can be in two maximal components,
so it is a partition.
There is an elegant, linear time algorithm to find the strongly
connected components of a directed graph using DFS which
is similar to the algorithm for biconnected components.
Backtracking and Depth-First Search
Depth-first search uses essentially the same idea as backtrack-
ing.
Both involve exhaustively searching all possibilities by
advancing if it is possible, and backing up as soon as there
is no unexplored possibility for further advancement. Both
are most easily understood as recursive algorithms.

Contenu connexe

Tendances

All pairs shortest path algorithm
All pairs shortest path algorithmAll pairs shortest path algorithm
All pairs shortest path algorithm
Srikrishnan Suresh
 
Skiena algorithm 2007 lecture11 breadth deapth first search
Skiena algorithm 2007 lecture11 breadth deapth first searchSkiena algorithm 2007 lecture11 breadth deapth first search
Skiena algorithm 2007 lecture11 breadth deapth first search
zukun
 

Tendances (20)

Biconnected components (13024116056)
Biconnected components (13024116056)Biconnected components (13024116056)
Biconnected components (13024116056)
 
Shortest path (Dijkistra's Algorithm) & Spanning Tree (Prim's Algorithm)
Shortest path (Dijkistra's Algorithm) & Spanning Tree (Prim's Algorithm)Shortest path (Dijkistra's Algorithm) & Spanning Tree (Prim's Algorithm)
Shortest path (Dijkistra's Algorithm) & Spanning Tree (Prim's Algorithm)
 
2.5 graph dfs
2.5 graph dfs2.5 graph dfs
2.5 graph dfs
 
All pairs shortest path algorithm
All pairs shortest path algorithmAll pairs shortest path algorithm
All pairs shortest path algorithm
 
Shortest path
Shortest pathShortest path
Shortest path
 
BFS
BFSBFS
BFS
 
Graph Algorithms: Breadth-First Search (BFS)
Graph Algorithms: Breadth-First Search (BFS)Graph Algorithms: Breadth-First Search (BFS)
Graph Algorithms: Breadth-First Search (BFS)
 
(floyd's algm)
(floyd's algm)(floyd's algm)
(floyd's algm)
 
SINGLE-SOURCE SHORTEST PATHS
SINGLE-SOURCE SHORTEST PATHS SINGLE-SOURCE SHORTEST PATHS
SINGLE-SOURCE SHORTEST PATHS
 
Dijksatra
DijksatraDijksatra
Dijksatra
 
Shortest path algorithm
Shortest path algorithmShortest path algorithm
Shortest path algorithm
 
bode_plot By DEV
 bode_plot By DEV bode_plot By DEV
bode_plot By DEV
 
BFS, Breadth first search | Search Traversal Algorithm
BFS, Breadth first search | Search Traversal AlgorithmBFS, Breadth first search | Search Traversal Algorithm
BFS, Breadth first search | Search Traversal Algorithm
 
Bellman Ford's Algorithm
Bellman Ford's AlgorithmBellman Ford's Algorithm
Bellman Ford's Algorithm
 
Presentation on Breadth First Search (BFS)
Presentation on Breadth First Search (BFS)Presentation on Breadth First Search (BFS)
Presentation on Breadth First Search (BFS)
 
Graph Traversal Algorithms - Depth First Search Traversal
Graph Traversal Algorithms - Depth First Search TraversalGraph Traversal Algorithms - Depth First Search Traversal
Graph Traversal Algorithms - Depth First Search Traversal
 
Graph Algorithms
Graph AlgorithmsGraph Algorithms
Graph Algorithms
 
Skiena algorithm 2007 lecture11 breadth deapth first search
Skiena algorithm 2007 lecture11 breadth deapth first searchSkiena algorithm 2007 lecture11 breadth deapth first search
Skiena algorithm 2007 lecture11 breadth deapth first search
 
18 Basic Graph Algorithms
18 Basic Graph Algorithms18 Basic Graph Algorithms
18 Basic Graph Algorithms
 
The Floyd–Warshall algorithm
The Floyd–Warshall algorithmThe Floyd–Warshall algorithm
The Floyd–Warshall algorithm
 

En vedette (6)

2.2 topological sort 02
2.2 topological sort 022.2 topological sort 02
2.2 topological sort 02
 
Topological sort
Topological sortTopological sort
Topological sort
 
Graph algorithm
Graph algorithmGraph algorithm
Graph algorithm
 
Ch18
Ch18Ch18
Ch18
 
Bloom filter
Bloom filterBloom filter
Bloom filter
 
Skiena algorithm 2007 lecture10 graph data strctures
Skiena algorithm 2007 lecture10 graph data strcturesSkiena algorithm 2007 lecture10 graph data strctures
Skiena algorithm 2007 lecture10 graph data strctures
 

Similaire à Skiena algorithm 2007 lecture12 topological sort connectivity

graphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docx
graphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docxgraphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docx
graphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docx
whittemorelucilla
 
Riya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptx
Riya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptxRiya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptx
Riya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptx
RIYABEPARI
 

Similaire à Skiena algorithm 2007 lecture12 topological sort connectivity (20)

Graph
GraphGraph
Graph
 
graphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docx
graphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docxgraphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docx
graphin-c1.pnggraphin-c1.txt1 22 3 83 44 5.docx
 
Graphs
GraphsGraphs
Graphs
 
ALG5.1.ppt
ALG5.1.pptALG5.1.ppt
ALG5.1.ppt
 
gSpan algorithm
 gSpan algorithm gSpan algorithm
gSpan algorithm
 
gSpan algorithm
gSpan algorithmgSpan algorithm
gSpan algorithm
 
2.5 bfs & dfs 02
2.5 bfs & dfs 022.5 bfs & dfs 02
2.5 bfs & dfs 02
 
Graphs
GraphsGraphs
Graphs
 
Breath first Search and Depth first search
Breath first Search and Depth first searchBreath first Search and Depth first search
Breath first Search and Depth first search
 
LEC 12-DSALGO-GRAPHS(final12).pdf
LEC 12-DSALGO-GRAPHS(final12).pdfLEC 12-DSALGO-GRAPHS(final12).pdf
LEC 12-DSALGO-GRAPHS(final12).pdf
 
DFS and BFS
DFS and BFSDFS and BFS
DFS and BFS
 
Data Structures - Lecture 10 [Graphs]
Data Structures - Lecture 10 [Graphs]Data Structures - Lecture 10 [Graphs]
Data Structures - Lecture 10 [Graphs]
 
U1 L5 DAA.pdf
U1 L5 DAA.pdfU1 L5 DAA.pdf
U1 L5 DAA.pdf
 
Graphs
GraphsGraphs
Graphs
 
Riya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptx
Riya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptxRiya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptx
Riya Bepari_34700122020_Artificial Intelligence_PEC-IT501B.pptx
 
Depth first traversal(data structure algorithms)
Depth first traversal(data structure algorithms)Depth first traversal(data structure algorithms)
Depth first traversal(data structure algorithms)
 
Graph Data Structure
Graph Data StructureGraph Data Structure
Graph Data Structure
 
Analysis and design of algorithms part 3
Analysis and design of algorithms part 3Analysis and design of algorithms part 3
Analysis and design of algorithms part 3
 
Bfs & dfs application
Bfs & dfs applicationBfs & dfs application
Bfs & dfs application
 
Analysis & design of algorithm
Analysis & design of algorithmAnalysis & design of algorithm
Analysis & design of algorithm
 

Plus de zukun

My lyn tutorial 2009
My lyn tutorial 2009My lyn tutorial 2009
My lyn tutorial 2009
zukun
 
ETHZ CV2012: Tutorial openCV
ETHZ CV2012: Tutorial openCVETHZ CV2012: Tutorial openCV
ETHZ CV2012: Tutorial openCV
zukun
 
ETHZ CV2012: Information
ETHZ CV2012: InformationETHZ CV2012: Information
ETHZ CV2012: Information
zukun
 
Siwei lyu: natural image statistics
Siwei lyu: natural image statisticsSiwei lyu: natural image statistics
Siwei lyu: natural image statistics
zukun
 
Lecture9 camera calibration
Lecture9 camera calibrationLecture9 camera calibration
Lecture9 camera calibration
zukun
 
Brunelli 2008: template matching techniques in computer vision
Brunelli 2008: template matching techniques in computer visionBrunelli 2008: template matching techniques in computer vision
Brunelli 2008: template matching techniques in computer vision
zukun
 
Modern features-part-4-evaluation
Modern features-part-4-evaluationModern features-part-4-evaluation
Modern features-part-4-evaluation
zukun
 
Modern features-part-3-software
Modern features-part-3-softwareModern features-part-3-software
Modern features-part-3-software
zukun
 
Modern features-part-2-descriptors
Modern features-part-2-descriptorsModern features-part-2-descriptors
Modern features-part-2-descriptors
zukun
 
Modern features-part-1-detectors
Modern features-part-1-detectorsModern features-part-1-detectors
Modern features-part-1-detectors
zukun
 
Modern features-part-0-intro
Modern features-part-0-introModern features-part-0-intro
Modern features-part-0-intro
zukun
 
Lecture 02 internet video search
Lecture 02 internet video searchLecture 02 internet video search
Lecture 02 internet video search
zukun
 
Lecture 01 internet video search
Lecture 01 internet video searchLecture 01 internet video search
Lecture 01 internet video search
zukun
 
Lecture 03 internet video search
Lecture 03 internet video searchLecture 03 internet video search
Lecture 03 internet video search
zukun
 
Icml2012 tutorial representation_learning
Icml2012 tutorial representation_learningIcml2012 tutorial representation_learning
Icml2012 tutorial representation_learning
zukun
 
Advances in discrete energy minimisation for computer vision
Advances in discrete energy minimisation for computer visionAdvances in discrete energy minimisation for computer vision
Advances in discrete energy minimisation for computer vision
zukun
 
Gephi tutorial: quick start
Gephi tutorial: quick startGephi tutorial: quick start
Gephi tutorial: quick start
zukun
 
EM algorithm and its application in probabilistic latent semantic analysis
EM algorithm and its application in probabilistic latent semantic analysisEM algorithm and its application in probabilistic latent semantic analysis
EM algorithm and its application in probabilistic latent semantic analysis
zukun
 
Object recognition with pictorial structures
Object recognition with pictorial structuresObject recognition with pictorial structures
Object recognition with pictorial structures
zukun
 
Iccv2011 learning spatiotemporal graphs of human activities
Iccv2011 learning spatiotemporal graphs of human activities Iccv2011 learning spatiotemporal graphs of human activities
Iccv2011 learning spatiotemporal graphs of human activities
zukun
 

Plus de zukun (20)

My lyn tutorial 2009
My lyn tutorial 2009My lyn tutorial 2009
My lyn tutorial 2009
 
ETHZ CV2012: Tutorial openCV
ETHZ CV2012: Tutorial openCVETHZ CV2012: Tutorial openCV
ETHZ CV2012: Tutorial openCV
 
ETHZ CV2012: Information
ETHZ CV2012: InformationETHZ CV2012: Information
ETHZ CV2012: Information
 
Siwei lyu: natural image statistics
Siwei lyu: natural image statisticsSiwei lyu: natural image statistics
Siwei lyu: natural image statistics
 
Lecture9 camera calibration
Lecture9 camera calibrationLecture9 camera calibration
Lecture9 camera calibration
 
Brunelli 2008: template matching techniques in computer vision
Brunelli 2008: template matching techniques in computer visionBrunelli 2008: template matching techniques in computer vision
Brunelli 2008: template matching techniques in computer vision
 
Modern features-part-4-evaluation
Modern features-part-4-evaluationModern features-part-4-evaluation
Modern features-part-4-evaluation
 
Modern features-part-3-software
Modern features-part-3-softwareModern features-part-3-software
Modern features-part-3-software
 
Modern features-part-2-descriptors
Modern features-part-2-descriptorsModern features-part-2-descriptors
Modern features-part-2-descriptors
 
Modern features-part-1-detectors
Modern features-part-1-detectorsModern features-part-1-detectors
Modern features-part-1-detectors
 
Modern features-part-0-intro
Modern features-part-0-introModern features-part-0-intro
Modern features-part-0-intro
 
Lecture 02 internet video search
Lecture 02 internet video searchLecture 02 internet video search
Lecture 02 internet video search
 
Lecture 01 internet video search
Lecture 01 internet video searchLecture 01 internet video search
Lecture 01 internet video search
 
Lecture 03 internet video search
Lecture 03 internet video searchLecture 03 internet video search
Lecture 03 internet video search
 
Icml2012 tutorial representation_learning
Icml2012 tutorial representation_learningIcml2012 tutorial representation_learning
Icml2012 tutorial representation_learning
 
Advances in discrete energy minimisation for computer vision
Advances in discrete energy minimisation for computer visionAdvances in discrete energy minimisation for computer vision
Advances in discrete energy minimisation for computer vision
 
Gephi tutorial: quick start
Gephi tutorial: quick startGephi tutorial: quick start
Gephi tutorial: quick start
 
EM algorithm and its application in probabilistic latent semantic analysis
EM algorithm and its application in probabilistic latent semantic analysisEM algorithm and its application in probabilistic latent semantic analysis
EM algorithm and its application in probabilistic latent semantic analysis
 
Object recognition with pictorial structures
Object recognition with pictorial structuresObject recognition with pictorial structures
Object recognition with pictorial structures
 
Iccv2011 learning spatiotemporal graphs of human activities
Iccv2011 learning spatiotemporal graphs of human activities Iccv2011 learning spatiotemporal graphs of human activities
Iccv2011 learning spatiotemporal graphs of human activities
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Dernier (20)

JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 

Skiena algorithm 2007 lecture12 topological sort connectivity

  • 1. Lecture 12: Depth-First Search Steven Skiena Department of Computer Science State University of New York Stony Brook, NY 11794–4400 http://www.cs.sunysb.edu/∼skiena
  • 2. Problem of the Day Prove that in a breadth-first search on a undirected graph G, every edge in G is either a tree edge or a cross edge, where a cross edge (x, y) is an edge where x is neither is an ancestor or descendent of y.
  • 3. Depth-First Search DFS has a neat recursive implementation which eliminates the need to explicitly use a stack. Discovery and final times are a convenience to maintain. dfs(graph *g, int v) { edgenode *p; (* temporary pointer *) int y; (* successor vertex *) if (finished) return; (* allow for search termination *) discovered[v] = TRUE; time = time + 1; entry time[v] = time; process vertex early(v); p = g− >edges[v]; while (p ! = NULL) { y = p− >y;
  • 4. if (discovered[y] == FALSE) { parent[y] = v; process edge(v,y); dfs(g,y); } else if ((!processed[y]) || (g− >directed)) process edge(v,y); if (finished) return; p = p− >next; } process vertex late(v); time = time + 1; exit time[v] = time; processed[v] = TRUE; }
  • 5. The Key Idea with DFS A depth-first search of a graph organizes the edges of the graph in a precise way. In a DFS of an undirected graph, we assign a direction to each edge, from the vertex which discover it: 2 1 3 1 2 6 4 3 5 4 6 5
  • 6. Edge Classification for DFS Every edge is either: 3. A Forward Edge 1. A Tree Edge to a decendant 4. A Cross Edge 2. A Back Edge to a different node to an ancestor On any particular DFS or BFS of a directed or undirected graph, each edge gets classified as one of the above.
  • 7. Edge Classification Implementation int edge classification(int x, int y) { if (parent[y] == x) return(TREE); if (discovered[y] && !processed[y]) return(BACK); if (processed[y] && (entry time[y]¿entry time[x])) return(FORWARD); if (processed[y] && (entry time[y]¡entry time[x])) return(CROSS); printf(”Warning: unclassified edge (%d,%d)”,x,y); }
  • 8. DFS: Tree Edges and Back Edges Only The reason DFS is so important is that it defines a very nice ordering to the edges of the graph. In a DFS of an undirected graph, every edge is either a tree edge or a back edge. Why? Suppose we have a forward edge. We would have encountered (4, 1) when expanding 4, so this is a back edge. 1 2 3 4
  • 9. No Cross Edges in DFS Suppose we have a cross-edge 1 2 5 When expanding 2, we would discover 5, so the tree would look like: 3 4 6 1 2 3 4 5 6
  • 10. DFS Application: Finding Cycles Back edges are the key to finding a cycle in an undirected graph. Any back edge going from x to an ancestor y creates a cycle with the path in the tree from y to x. process edge(int x, int y) { if (parent[x] ! = y) { (* found back edge! *) printf(”Cycle from %d to %d:”,y,x); find path(y,x,parent); finished = TRUE; } }
  • 11. Articulation Vertices Suppose you are a terrorist, seeking to disrupt the telephone network. Which station do you blow up? An articulation vertex is a vertex of a connected graph whose deletion disconnects the graph. Clearly connectivity is an important concern in the design of any network. Articulation vertices can be found in O(n(m+n)) – just delete each vertex to do a DFS on the remaining graph to see if it is connected.
  • 12. A Faster O(n + m) DFS Algorithm In a DFS tree, a vertex v (other than the root) is an articulation vertex iff v is not a leaf and some subtree of v has no back edge incident until a proper ancestor of v. The root is a special case since it has no ancestors. X X is an articulation vertex since the right subtree does not have a back edge to a proper ancestor. Leaves cannot be articulation vertices
  • 13. Topological Sorting A directed, acyclic graph has no directed cycles. B D A E C G F A topological sort of a graph is an ordering on the vertices so that all edges go from left to right. DAGs (and only DAGs) has at least one topological sort (here G, A, B, C, F, E, D).
  • 14. Applications of Topological Sorting Topological sorting is often useful in scheduling jobs in their proper sequence. In general, we can use it to order things given precidence constraints. Example: Dressing schedule from CLR.
  • 15. Example: Identifying errors in DNA fragment assembly Certain fragments are constrained to be to the left or right of other fragments, unless there are errors. A B R A C A D A B R A A B R A C A B R A C A C A D A R A C A D A D A B R A C A D A D A B R A A D A B R R A C A D D A B R A Solution – build a DAG representing all the left-right constraints. Any topological sort of this DAG is a consistant ordering. If there are cycles, there must be errors.
  • 16. Topological Sorting via DFS A directed graph is a DAG if and only if no back edges are encountered during a depth-first search. Labeling each of the vertices in the reverse order that they are marked processed finds a topological sort of a DAG. Why? Consider what happens to each directed edge {x, y} as we encounter it during the exploration of vertex x:
  • 17. Case Analysis • If y is currently undiscovered, then we then start a DFS of y before we can continue with x. Thus y is marked completed before x is, and x appears before y in the topological order, as it must. • If y is discovered but not completed, then {x, y} is a back edge, which is forbidden in a DAG. • If y is completed, then it will have been so labeled before x. Therefore, x appears before y in the topological order, as it must.
  • 18. Topological Sorting Implementation process vertex late(int v) { push(&sorted,v); } process edge(int x, int y) { int class; class = edge classification(x,y); if (class == BACK) printf(”Warning: directed cycle found, not a DAG”); } We push each vertex on a stack soon as we have evaluated all outgoing edges. The top vertex on the stack always has no incoming edges from any vertex on the stack, repeatedly popping them off yields a topological ordering.
  • 19. Strongly Connected Components A directed graph is strongly connected iff there is a directed path between any two vertices. The strongly connected components of a graph is a partition of the vertices into subsets (maximal) such that each subset is strongly connected. a b e f c d g h Observe that no vertex can be in two maximal components, so it is a partition.
  • 20. There is an elegant, linear time algorithm to find the strongly connected components of a directed graph using DFS which is similar to the algorithm for biconnected components.
  • 21. Backtracking and Depth-First Search Depth-first search uses essentially the same idea as backtrack- ing. Both involve exhaustively searching all possibilities by advancing if it is possible, and backing up as soon as there is no unexplored possibility for further advancement. Both are most easily understood as recursive algorithms.