1 / 17

Strongly connected components

Strongly connected components. Strongly connected components.

cana
Download Presentation

Strongly connected components

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Strongly connected components

  2. Strongly connected components • Definition: the strongly connected components (SCC) C1, …, Ck of a directed graph G = (V,E) are the largest disjoint sub-graphs (no common vertices or edges) such that for any two vertices u and v in Ci, there is a path from u to v and from v to u. • Equivalence classes of the binary path(u,v) relation, denoted by u ~ v. • Applications: networking, communications. • Problem: compute the strongly connected components of G in linear time Θ(|V|+|E|).

  3. b f e d h g a c Example: strongly connected components

  4. b f e d h g a c Example: strongly connected components

  5. Strongly connected components graph • Definition: the SCC graphG~ = (V~,E~) of the graph G = (V,E) is as follows: • V~ = {C1, …, Ck}. Each SCC is a vertex. • E~ = {(Ci,Cj)| i≠j and there is (x,y)E, where xCiand yCj}. A directed edge between components corresponds to a directed edge between them from any of their vertices. • G~ is a directed acyclic graph(no directed cycles)! • Definition: the reverse graphG R = (V,ER) of the graph G = (V,E) is G with its edge directions reversed: E R = {(u,v)| (v,u)E}.

  6. b f e b f e h h d d g g a c a c Example: reverse graph G R G G R

  7. b f e d h g C1 C2 C4 C3 a c Example: SCC graph

  8. SCC algorithm: Approach • H G~ • For i=k,...,1 • v  node of G that lies in a sink node of H (*) • C  connected component retuned by DFS(v) • H  H - C • End • If we manage to execute (*) we are done

  9. b f e h d g a c DFS numbering • Useful information • pre(v): “time” when a node is visited in a DFS • post(v): “time” when DFS(v) finishes 2/15 3/14 1/16 8/11 7/12 9/10 4/13 5/6

  10. DFS numbering • DFS(G) • 0. time  1 • 1Para todo v em G • 2 Se v não visitado então • 3 DFS-Visit(G, v) • DFS-Visit(G, v) • 1 Marque v como visitado • 1.5 pre(v) time; time++ • 2Para todow em Adj(v) • 3Se w não visitado então • 4 Insira aresta (v, w) na árvore • DFS-Visit(G, w) • Post(v) time; time++

  11. DFS numbering • Property If C an D are strongly connected components and there is an edge from a node in C to a node in D, then the highest post() in C is bigger than the highest post() number in D • Proof. Let c be the first node visited in C and d be the first node visited in D. • Case i) c is visited before d. • DFS(c) visit all nodes in D (they are reachable from c due to the existing edge) • Thus, post(c) > post(x) for every x in D

  12. DFS numbering • Property If C an D are strongly connected components and there is an edge from a node in C to a node in D, then the highest post() in C is bigger than the highest post() number in D • Proof. Let c be the first node visited in C and d be the first node visited in D • Case 2) d is visited before c. • DFS(d) visit all nodes in D because all of them are reachable from d • DFS(d) does not visit nodes from C since they are not reachable from d. • Thus , post(x) <post(y) for every pair of nodes x,y, with x in D and y in C

  13. DFS numbering • Corollary. The node of G with highest post number lies in a source node in G~ • Observation 1. The strongly connected components are the same in G and G R • Observation 2. If a node lies in a source node of G~ then it lies in a sink node in (G R)~

  14. SCC algorithm • Idea: compute the SCCgraph G~ = (V~,E~) with two DFS, one for G and one for its reverse GR, visiting the vertices in reverse order. • SCC(G) 1. DFS(G) to compute post[v], ∀vV 2. Compute G R 3. DFS(G R) in the order of decreasing post[v] 4. Output the vertices of each tree in the DFS forest as a separate SCC.

  15. 3/4 2/5 1/6 b f e 9/16 11/12 7/8 d h 10/15 13/14 g a c Example: computing SCC

  16. 3/4 2/5 1/6 b b f f e e 9/16 11/12 7/8 d d h h 10/15 13/14 g g a a c c Example: computing SCC 16 8

  17. 3/4 2/5 1/6 b b f f e e 9/16 11/12 7/8 h d d h 10/15 13/14 g g C4 C3 C1 a a C2 c c Example: computing SCC 2 4 3 1 16 8

More Related