1 / 46

What is a graph ?

What is a graph ?. 1. 2. 3. 5. 4. What is a graph ?. G=(V,E). V = a set of vertices E = a set of edges. edge = unordered pair of vertices. 1. 2. 3. 5. 4. What is a graph ?. G=(V,E). V = {1,2,3,4,5} E = {{1,5}, {3,5}, {2,3}, {2,4}, {3,4}}. 1. 2. 3. 5. 4. What is a graph ?.

Download Presentation

What is a graph ?

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. What is a graph ? 1 2 3 5 4

  2. What is a graph ? G=(V,E) V = a set of vertices E = a set of edges edge = unordered pair of vertices 1 2 3 5 4

  3. What is a graph ? G=(V,E) V = {1,2,3,4,5} E = {{1,5}, {3,5}, {2,3}, {2,4}, {3,4}} 1 2 3 5 4

  4. What is a graph ? G=(V,E) V = {1,2,3,4,5} E = {{1,5}, {2,3}, {2,4}, {3,4}} 1 2 3 5 4

  5. Connectedness connected 3 2 1 5 4 not connected 3 2 1 5 4 How can we check if a graph is connected?

  6. Representing a graph adjacency matrix |V| * |V| symmetric matrix A with Ai,j = 1 if {i,j} E Ai,j = 0 otherwise

  7. Representing a graph adjacency matrix 3 2 1 5 4 space = (V2)

  8. Representing a graph adjacency matrix 3 2 1 5 4 space = (V2) is {u,v} an edge ? (?) list neighbors of v (?)

  9. Representing a graph adjacency matrix 3 2 1 5 4 space = (V2) is {u,v} an edge ? (1) list neighbors of v (n)

  10. Representing a graph adjacency lists for each vertex v V linked list of neighbors of v

  11. Representing a graph adjacency lists 3 2 1 5 4 1: 3,5 2: 3,4 3: 1,2,4 4: 2,3 5: 1 space = (E)

  12. Representing a graph adjacency lists 3 2 1 1: 3,5 2: 3,4 3: 1,2,4 4: 2,3 5: 1 5 4 space = (E) is {u,v} an edge ? (?) list neighbors of v (?)

  13. Representing a graph adjacency lists 3 2 1 1: 3,5 2: 3,4 3: 1,2,4 4: 2,3 5: 1 5 4 space = (E) is {u,v} an edge ? (min(dv,du)) list neighbors of v (dv)

  14. Representing a graph adjacency lists space = (E) 1: 3,5 2: 3,4 3: 1,2,4 4: 2,3 5: 1 is {u,v} in E ? (min{du,dv}) neigbors of v ? (dv) adjacency matrix space = (V2) is {u,v} in E ? (1) neigbors of v ? (n)

  15. Counting connected components How can we check if a graph is connected? INPUT: graph G given by adjacency list OUTPUT: number of components of G

  16. BFS (G,v) G – undirected graph, V={1,...,n} seen[v] = false for all v  V Q=queue (FIFO) seen[v]  true enqueue(Q,v) while Q not empty do w  dequeue(Q) for each neighbor u of w if not seen[u] then seen[u]  true enqueue(Q,u)

  17. Counting connected components C  0 for all v  V do seen[v]  false for all v  V do if not seen[v] then C++ BFS(G,v) output G has C connected components

  18. DFS G – undirected graph, V={1,...,n} visited[v] = false for all v  V explore(G,v) visited[v]  true for each neighbor u of v if not visited(u) then explore(G,u)

  19. DFS G – undirected graph, V={1,...,n} visited[v] = false for all v  V explore(G,v) visited[v]  true pre[v]  clock; clock++ for each neighbor u of v if not visited(u) then explore(G,u) post[v]  clock; clock++

  20. DFS explore(G,v) visited[v]  true pre[v]  clock; clock++ for each neighbor u of v if not visited(u) then explore(G,u) post[v]  clock; clock++ vertex  Iv := [pre[v],post[v]] “interval property” for u,v V either * Iv and Iu are disjoint, or * one is contained in the other

  21. DFS explore(G,v) visited[v]  true pre[v]  clock; clock++ for each neighbor u of v if not visited(u) then explore(G,u) post[v]  clock; clock++ A B D C

  22. DFS explore(G,v) visited[v]  true pre[v]  clock; clock++ for each neighbor u of v if not visited(u) then explore(G,u) post[v]  clock; clock++ A tree edges B D C

  23. Digraphs (directed graphs) G=(V,E) V = a set of vertices E = a set of edges edge = ordered pair of vertices (u,v) v u

  24. Digraphs (directed graphs) adjacency lists for each vertex v V linked list of out-neighbors of v adjacency matrix |V| * |V| matrix A with Ai,j = 1 if (i,j) E Ai,j = 0 otherwise

  25. Digraphs (directed graphs) a path = sequence of vertices v1,v2,...,vk such that (v1,v2) E, ... , (vk-1,vk) E

  26. DAGs (acyclic digraphs) a cycle = sequence of vertices v1,v2,...,vk such that (v1,v2) E, ... , (vk-1,vk),(vk,v1) E DAG = digraph with no cycle

  27. Topological sort (linearization) INPUT: DAG G given by adjacency list OUTPUT: ordering of vertices such that edges go forward

  28. DFS on digraphs G = digraph, V={1,...,n} visited[v] = false for all v  V explore(G,v) visited[v]  true pre[v]  clock; clock++ for each out-neighbor u of v if not visited(u) then explore(G,u) post[v]  clock; clock++

  29. DFS on digraphs A B D C

  30. DFS on digraphs A root B D C descendant, ancestor child, parent

  31. DFS on digraphs A tree edge B D C

  32. DFS on digraphs A tree edge B D C

  33. DFS on digraphs back edge A tree edge B D C

  34. DFS on digraphs back edge A tree edge B D C cross edge

  35. DFS on digraphs back edge A tree edge B forward edge D C cross edge

  36. Relationships between the intervals? back edge A tree edge B forward edge D C cross edge

  37. Topological sort using DFS Lemma: digraph is a DAG if and only if DFS has a back edge.

  38. Topological sort using DFS Lemma: digraph is a DAG if and only if DFS has a back edge. Lemma: in a DAG every edge goes to a vertex with lower post explore(G,v) visited[v]  true pre[v]  clock; clock++ for each neighbor u of v if not visited(u) then explore(G,u) post[v]  clock; clock++

  39. (strong) connectedness a digraph G is strongly connected if for every u,v V there exists a path from u to v in G

  40. (strong) connectedness How to check if a digraph is strongly connected?

  41. (strong) connectedness How to check if a digraph is strongly connected? for every uV do DFS(G,u) check if every vV was visited

  42. (strong) connectedness How to check if a digraph is strongly connected? pick some uV DFS(G,u) check if every vV was visited DFS(reverse(G),u) check if every vV was visited

  43. Strongly connected components DAG of strongly connected components

  44. Strongly connected components Lemma: G and reverse(G) have the same strongly connected components.

  45. Strongly connected components DAG of strongly connected components

  46. Strongly connected components for all v V do color[v] white for all v V do if color[v]=white then DFS(reverse(G),v) DFS(G,u) (vertices in order post[])

More Related