Presentation is loading. Please wait.

Presentation is loading. Please wait.

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.

Similar presentations


Presentation on theme: "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."— Presentation transcript:

1 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 of G A spanning subgraph of G is a subgraph that contains all the vertices of G Subgraph Spanning subgraph

2 2 Connectivity A graph is connected if there is a path between every pair of vertices A connected component of a graph G is a maximal connected subgraph of G Connected graph Non connected graph with two connected components

3 3 Trees and Forests A (free) tree is an undirected graph T such that T is connected T has no cycles This definition of tree is different from the one of a rooted tree A forest is an undirected graph without cycles The connected components of a forest are trees Tree Forest

4 4 Spanning Trees and Forests A spanning tree of a connected graph is a spanning subgraph that is a tree A spanning tree is not unique unless the graph is a tree Spanning trees have applications to the design of communication networks A spanning forest of a graph is a spanning subgraph that is a forest Graph Spanning tree

5 Breadth-First Search Can be used to attempt to visit all nodes of a graph in a systematic manner Works with directed and undirected graphs Works with weighted and unweighted graphs

6 A H B F E D C G Overview Task: Conduct a breadth-first search of the graph starting with node D Each node has one of the three statuses: unvisited, visited (or discovered), processed Breadth-first search starts with given node 0

7 A H B F E D C G Overview Nodes visited: D Nodes processed: Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

8 A H B F E D C G Overview Nodes visited: D, C Nodes processed: Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

9 A H B F E D C G Overview Nodes visited: D, C, E Nodes processed: Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

10 A H B F E D C G Overview Nodes visited: D, C, E, F Nodes processed: D Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

11 A H B F E D C G Overview Nodes visited: D, C, E, F, G Nodes processed: D, C, E When all nodes in ripple are visited, visit nodes in next ripples 0 2 1

12 A H B F E D C G Overview Nodes visited: D, C, E, F, G, H Nodes processed: D, C, E, F, G When all nodes in ripple are visited, visit nodes in next ripples 0 2 1 3

13 A H B F E D C G Overview Nodes visited: D, C, E, F, G, H, A Nodes processed: D, C, E, F, G When all nodes in ripple are visited, visit nodes in next ripples 0 2 1 3 4

14 A H B F E D C G Overview Nodes visited: D, C, E, F, G, H, A, B Nodes processed: D, C, E, F, G, H, A, B When all nodes in ripple are visited, visit nodes in next ripples 0 2 1 3 4

15 A H B F E D C G Walk-Through Enqueued Array A B C D E F G H How is this accomplished? Using a queue for visited but not yet processed nodes! Rules: (1) Maintain an enqueued array. (2) Process node when dequeued. Q :

16 A H B F E D C G Walk-Through Enqueued Array A B C D√ E F G H Enqueue D. Notice, D not yet visited. Q : D Nodes visited:

17 A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G H Dequeue D. Visit D. Enqueue unenqueued nodes adjacent to D. Q : C  E  F Nodes visited: D

18 A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G H Dequeue C. Visit C. Enqueue unenqueued nodes adjacent to C. Q : E  F Nodes visited: D, C

19 A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G H Dequeue E. Visit E. Enqueue unenqueued nodes adjacent to E. Q : F  G Nodes visited: D, C, E

20 A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G√ H Dequeue F. Visit F. Enqueue unenqueued nodes adjacent to F. Q : G Nodes visited: D, C, E, F

21 A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G√ H√ Dequeue G. Visit G. Enqueue unenqueued nodes adjacent to G. Q : H Nodes visited: D, C, E, F, G

22 A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Dequeue H. Visit H. Enqueue unenqueued nodes adjacent to H. Q : A  B Nodes visited: D, C, E, F, G, H

23 A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Dequeue A. Visit A. Enqueue unenqueued nodes adjacent to A. Q : B Nodes visited: D, C, E, F, G, H, A

24 A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Dequeue B. Visit B. Enqueue unenqueued nodes adjacent to B. Q : (empty) Nodes visited: D, C, E, F, G, H, A, B

25 A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Q empty. Algorithm done. Q is empty Nodes visited: D, C, E, F, G, H, A, B

26 Consider Trees 1.What do we call a breadth-first traversal on trees? 2.If we consider only each edge (u, v) where node v is visited for the first time by DFS from node u. What do we call the subgraph consisted of these edges?

27 Consider Trees 1.What do we call a breadth-first traversal on trees? Preorder traversal 2.If we consider only each edge (u, v) where node v is visited for the first time by BFS from node u. What do we call the subgraph consisted of these edges? The BFS tree. A H B F E D C G

28 Depth-First Search Also called Depth-First Search Can be used to attempt to visit all nodes of a graph in a systematic manner Works with directed and undirected graphs Works with weighted and unweighted graphs

29 A H B F E D C G Walk-Through Visited Array A B C D E F G H Task: Conduct a depth-first search of the graph starting with node D

30 A H B F E D C G Walk-Through Visited Array A B C D √ E F G H Visit D D The order nodes are visited: D

31 A H B F E D C G Walk-Through Visited Array A B C D √ E F G H Consider nodes adjacent to D, decide to visit C first (Rule: visit adjacent nodes in alphabetical order) D The order nodes are visited: D

32 A H B F E D C G Walk-Through Visited Array A B C √ D √ E F G H Visit C CDCD The order nodes are visited: D, C

33 A H B F E D C G Walk-Through Visited Array A B C √ D √ E F G H No nodes adjacent to C; cannot continue  backtrack, i.e., pop stack and restore previous state CDCD The order nodes are visited: D, C

34 A H B F E D C G Walk-Through Visited Array A B C √ D √ E F G H Back to D – C has been visited, decide to visit E next D The order nodes are visited: D, C

35 A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G H Back to D – C has been visited, decide to visit E next EDED The order nodes are visited: D, C, E

36 A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G H Only G is adjacent to E EDED The order nodes are visited: D, C, E

37 A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H Visit G GEDGED The order nodes are visited: D, C, E, G

38 A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H Nodes D and H are adjacent to G. D has already been visited. Decide to visit H. GEDGED The order nodes are visited: D, C, E, G

39 A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H √ Visit H HGEDHGED The order nodes are visited: D, C, E, G, H

40 A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H √ Nodes A and B are adjacent to F. Decide to visit A next. HGEDHGED The order nodes are visited: D, C, E, G, H

41 A H B F E D C G Walk-Through Visited Array A √ B C √ D √ E √ F G √ H √ Visit A AHGEDAHGED The order nodes are visited: D, C, E, G, H, A

42 A H B F E D C G Walk-Through Visited Array A √ B C √ D √ E √ F G √ H √ Only Node B is adjacent to A. Decide to visit B next. AHGEDAHGED The order nodes are visited: D, C, E, G, H, A

43 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ Visit B BAHGEDBAHGED The order nodes are visited: D, C, E, G, H, A, B

44 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to B. Backtrack (pop the stack). AHGEDAHGED The order nodes are visited: D, C, E, G, H, A, B

45 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to A. Backtrack (pop the stack). HGEDHGED The order nodes are visited: D, C, E, G, H, A, B

46 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to H. Backtrack (pop the stack). GEDGED The order nodes are visited: D, C, E, G, H, A, B

47 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to G. Backtrack (pop the stack). EDED The order nodes are visited: D, C, E, G, H, A, B

48 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to E. Backtrack (pop the stack). D The order nodes are visited: D, C, E, G, H, A, B

49 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ F is unvisited and is adjacent to D. Decide to visit F next. D The order nodes are visited: D, C, E, G, H, A, B

50 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ Visit F FDFD The order nodes are visited: D, C, E, G, H, A, B, F

51 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ No unvisited nodes adjacent to F. Backtrack. D The order nodes are visited: D, C, E, G, H, A, B, F

52 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ No unvisited nodes adjacent to D. Backtrack. The order nodes are visited: D, C, E, G, H, A, B, F

53 A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ Stack is empty. Depth-first traversal is done. The order nodes are visited: D, C, E, G, H, A, B, F

54 54 Depth-First Search Depth-first search (DFS) is a general technique for traversing a graph A DFS traversal of a graph G Visits all the vertices and edges of G Determines whether G is connected Computes the connected components of G Computes a spanning forest of G DFS on a graph with n vertices and m edges takes O(n  m ) 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

55 55 DFS Algorithm The algorithm uses a mechanism for setting and getting “labels” of vertices and edges Algorithm DFS(G, v) Input graph G and a start vertex v of G Output labeling of the edges of G in the connected component of v as discovery edges and back edges setLabel(v, VISITED) for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) if getLabel(w)  UNVISITED setLabel(e, DISCOVERY) DFS(G, w) else if getLabel(w)  VISITED setLabel(e, BACK) else // getLabel(w)  PROCESSED setLabel(e, CROSS) setLabel(u, PROCESSED) Algorithm DFS(G) Input graph G Output labeling of the edges of G as discovery edges and back edges for all u  G.vertices() setLabel(u, UNVISITED) for all e  G.edges() setLabel(e, UNEXPLORED) for all v  G.vertices() if getLabel(v)  UNVISITED DFS(G, v)

56 56 Example (undirected graph) DB A C ED B A C ED B A C E discovery edge back edge A visited vertex A unvisited vertex unexplored edge

57 57 Example (cont.) DB A C E DB A C E DB A C E D B A C E

58 A H B F E D C G Classify edges by DFS The order nodes are visited: D, C, E, G, H, A, B, F discovery edge back edge cross edge (H,B) is labeled as CROSS, but it is a FORWARD edge.

59 Classification of Edges of G with Spanning Tree T An edge (u,v) of T is tree edge An edge (u,v) of G-T is back edge if u is a descendent of v. An edge (u,v) of G-T is forward edge if u is an ancestor of v. Else (u,v) is a cross edge

60 Classification of Edges of G via DFS Spanning Tree T 1 6 2 4 3 5 7 8 G 1 6 2 4 3 5 7 8 T

61 DFS tree T in an undirected graph has no cross or forward edges

62 62 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)

63 63 Properties of DFS Property 1 DFS(G, v) visits all the vertices and edges in the connected component of v Property 2 The discovery edges labeled by DFS(G, v) form a spanning tree of the connected component of v DB A C E

64 64 Analysis of DFS Setting/getting a vertex/edge label takes O(1) time Each vertex is labeled twice once as UNVISITED once as VISITED once as PROCESSED Each edge is labeled twice once as UNEXPLORED once as DISCOVERY or BACK or CROSS Method incidentEdges is called once for each vertex DFS runs in O(n  m) time provided the graph is represented by the adjacency list structure Note that  v deg(v)  2m

65 65 Path Finding We can specialize the DFS algorithm to find a path between two given vertices u and z using the template method pattern We call DFS(G, u) with u as the start vertex We use a stack S to keep track of the path between the start vertex and the current vertex As soon as destination vertex z is encountered, we return the path as the contents of the stack Algorithm pathDFS(G, v, z) setLabel(v, VISITED) S.push(v) if v  z return S.elements() for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) if getLabel(w)  UNEXPLORED setLabel(e, DISCOVERY) S.push(e) pathDFS(G, w, z) S.pop(e) else setLabel(e, BACK) S.pop(v)

66 66 Cycle Finding We can specialize the DFS algorithm to find a simple cycle using the template method pattern We use a stack S to keep track of the path between the start vertex and the current vertex As soon as a back edge (v, w) is encountered, we return the cycle as the portion of the stack from the top to vertex w Algorithm cycleDFS(G, v, z) setLabel(v, VISITED) S.push(v) for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) S.push(e) if getLabel(w)  UNEXPLORED setLabel(e, DISCOVERY) pathDFS(G, w, z) S.pop(e) else T  new empty stack repeat o  S.pop() T.push(o) until o  w return T.elements() S.pop(v)


Download ppt "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."

Similar presentations


Ads by Google