testing for connectedness and cycles connectedness of an undirected graph –implementation of...

11
Testing for Connectedness and Cycles Connectedness of an Undirected Graph Implementation of Connectedness detection Algorithm. Connectedness of a directed Graph Implementation of Strong Connectedness Algorithm. Algorithm for finding strongly connected components. Cycle detection algorithm in Directed Graphs. Review Questions.

Upload: augustus-parrish

Post on 14-Dec-2015

222 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Testing for Connectedness and Cycles

• Connectedness of an Undirected Graph

– Implementation of Connectedness detection Algorithm.

• Connectedness of a directed Graph

– Implementation of Strong Connectedness Algorithm.– Algorithm for finding strongly connected components.– Cycle detection algorithm in Directed Graphs.

• Review Questions.

Page 2: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Connectedness of an Undirected Graph

• An undirected graph G = (V, E) is connected if there is a path between every pair of vertices.

• Although the figure below appears to be two graphs, it is actually a single graph.

• Clearly, G is not connected. e.g. no path between A and D.

• G consists of two unconnected parts, each of which is a connected sub-graph --- connected components.

V = {A, B, C, D, E, F}

E = {{A, B}, {A, C}, {B, C}, {D, E}, {E, F}}

Page 3: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Implementation of Connectedness Algorithm• A simple way to test for connectedness in an undirected graph is to use

either depth-first or breadth-first traversal - Only if all the vertices are visited is the graph connected. The algorithm uses the following visitor:

public class CountingVisitor extends AbstractVisitor { protected int count; public int getCount(){ return count;} public void visit(Object obj) {count++;}}

• Using the CountingVisitor, the isConnected method is implemented as follows:

public boolean isConnected() { CountingVisitor visitor = new CountingVisitor(); Iterator i = getVertices(); Vertex start = (Vertex) i.next(); breadthFirstTraversal(visitor, start); return visitor.getCount() == numberOfVertices;}

• What is the time complexity of this algorithm in O()?

Page 4: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Connectedness of a Directed Graph

• A directed graph G = (V, E) is strongly connected if there is a directed path between every pair of vertices.

• Is the directed graph below connected?

– G is not strongly connected. No path between any of the vertices in {D, E, F}

– However, G is weakly connected since the underlying undirected graph is connected.

V = {A, B, C, D, E, F}

E = {(A, B), (B, C), (C, A), (B, E), (D, E), (E, F), (F, D)

Page 5: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Implementation of Strong Connectedness Algorithm• A simple way to test for strong connectedness is to use |V|

traversals - The graph is strongly connected if all the vertices are visited in each traversal.

public boolean isStronglyConnected() { if (!this.isDirected()) throw new InvalidOperationException( "Invalid for Undirected Graph"); Iterator it = getVertices(); while(it.hasNext()) { CountingVisitor visitor = new CountingVisitor(); breadthFirstTraversal(visitor, (Vertex) it.next()); if(visitor.getCount() != numberOfVertices) return false; } return true;}

• Implementation of weak connectedness is done in the Lab.

• What is the time complexity of this algorithm in O()?

Page 6: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Strongly Connected Components

• A strongly connected component in a directed graph DG=<V,E> is a set of vertices C (which is a subset of V) such that for every pair of vertices x,y in C, there exists a directed path from x to y and a directed path from y to x. – Thus, starting at any vertex in a strongly connected

component C, it is possible to reach every other vertex in C.

– The number of strongly connected components in a strongly connected directed graph is …..

Page 7: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Example

1

2

3

4

5

6

7

8

Page 8: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

SCC Algorithm

1. Perform a post-order depth first search on the directed graph DG.

2. Number the depth first search tree (or forest) using the visit method of the postorder traversal.

3. Form a new graph DGr=<V,Er> by reversing every edge in E to form Er.

4. Perform a depth first search on the directed graph DGr, with vertices ordered in decreasing order of their numbers generated in 2. Assign a distinct component number to all visited vertices every time the DFS procedure is called from within the general traversal algorithm.

What is the time complexity of the SCC Algorithm in O()?

Page 9: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Example

1

2

3

4

5

6

7

8

Page 10: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Cycles in a Directed Graph

• An easy way to detect the presence of cycles in a directed graph is to attempt a topological order traversal.

– This algorithm visits all the vertices of a directed graph if the graph has no cycles.

• In the following graph, after A is visited and removed, all the remaining vertices have in-degree of one.

• Thus, a topological order traversal cannot complete. This is because of the presence of the cycle { B, C, D, B}.

public boolean isCyclic() { CountingVisitor visitor = new CountingVisitor(); topologicalOrderTraversal(visitor); return visitor.getCount() != numberOfVertices;}

• What is the time complexity of this algorithm in O()?

Page 11: Testing for Connectedness and Cycles Connectedness of an Undirected Graph –Implementation of Connectedness detection Algorithm. Connectedness of a directed

Review Questions

1. Every tree is a directed, acyclic graph (DAG), but there exist DAGs that are not trees.a) How can we tell whether a given DAG is a tree?b) Devise an algorithm to test whether a given DAG is a tree.

2. Consider an acyclic, connected, undirected graph G that has n vertices. How many edges does G have?

3. In general, an undirected graph contains one or more connected components.a) Devise an algorithm that counts the number of connected components in a graph.b) Devise an algorithm that labels the vertices of a graph in such a way that all the vertices in a given connected component get the same label and vertices in different connected components get different labels.

4. Devise an algorithm that takes as input a graph, and a pair of vertices, v and w, and determines whether w is reachable from v.