Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "What is a graph ? 1 2 3 4 5. G=(V,E) V = a set of vertices E = a set of edges edge = unordered pair of vertices 1 2 3 4 5."— Presentation transcript:

1 What is a graph ?

2 G=(V,E) V = a set of vertices E = a set of edges edge = unordered pair of vertices

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}}

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

5 Connectedness connected not connected How can we check if a graph is connected?

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

7 Representing a graph adjacency matrix space = (V 2 )

8 Representing a graph adjacency matrix space = (V 2 ) is {u,v} an edge ? (?) list neighbors of v (?)

9 Representing a graph adjacency matrix space = (V 2 ) 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 space = (E) 1: 3,5 2: 3,4 3: 1,2,4 4: 2,3 5: 1

12 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} an edge ? (?) list neighbors of v (?)

13 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} an edge ? (min(d v,d u )) list neighbors of v (d v )

14 Representing a graph adjacency lists space = (E) 1: 3,5 2: 3,4 3: 1,2,4 4: 2,3 5: space = (V 2 ) adjacency matrix is {u,v} in E ? (min{d u,d v }) neigbors of v ? (d v ) 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) 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) G – undirected graph, V={1,...,n} seen[v] = false for all v V Q=queue (FIFO)

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 explore(G,v) visited[v] true for each neighbor u of v if not visited(u) then explore(G,u) G – undirected graph, V={1,...,n} visited[v] = false for all v V

19 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++ G – undirected graph, V={1,...,n} visited[v] = false for all v V

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 I v := [pre[v],post[v]] interval property for u,v V either * I v and I u 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 C D

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 B C D tree edges

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

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

25 a path = sequence of vertices v 1,v 2,...,v k such that (v 1,v 2 ) E,..., (v k-1,v k ) E Digraphs (directed graphs)

26 DAGs (acyclic digraphs) a cycle = sequence of vertices v 1,v 2,...,v k such that (v 1,v 2 ) E,..., (v k-1,v k ),(v k,v 1 ) 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 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++ G = digraph, V={1,...,n} visited[v] = false for all v V

29 DFS on digraphs A B C D

30 A B C D root descendant, ancestor child, parent

31 DFS on digraphs A B C D tree edge

32 DFS on digraphs A B C D tree edge

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

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

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

36 Relationships between the intervals? A B C D tree edge back edge cross edge forward 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. 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++ Lemma: in a DAG every edge goes to a vertex with lower post

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[])


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

Similar presentations


Ads by Google