Presentation is loading. Please wait.

Presentation is loading. Please wait.

Graph Traversal Discrete Mathematics and Its Applications Baojian Hua

Similar presentations


Presentation on theme: "Graph Traversal Discrete Mathematics and Its Applications Baojian Hua"— Presentation transcript:

1 Graph Traversal Discrete Mathematics and Its Applications Baojian Hua bjhua@ustc.edu.cn

2 BFS and DFS BFS: breath first searching start from one vertex, near to far generates BFS forest flat DFS: depth first searching recursion and back-tracking generates DFS forest narrow

3 “ graph ” ADT in C: Interface // in file “graph.h” #ifndef GRAPH_H #define GRAPH_H typedef struct graph *graph; typedef void (*tyVisit)(poly); graph newGraph (); void insertVertex (graph g, poly data); void insertEdge (graph g, poly from, poly to); void dfs (graph g, poly start, tyVisit visit); void bfs (graph g, poly start, tyVisit visit); // we’d see more later … #endif

4 Sample Graph a d b fe c For BFS, associate each vertex with a “ distance ” property. distance(v): the number of edges from the vertex “ start ” to vertex “ v ”, with distance(start)=0

5 Sample Graph BFS a d b fe c bfs (g, “ a ”, strOutput);

6 Sample Graph BFS a0a0 d b fe c bfs (g, “ a ”, strOutput); print a;

7 Sample Graph BFS a0a0 d b1b1 fe c bfs (g, “ a ”, strOutput); print a; // a choice print b;

8 Sample Graph BFS a0a0 d1d1 b1b1 fe c bfs (g, “ a ”, strOutput); print a; // a choice print b; print d;

9 Sample Graph BFS a0a0 d1d1 b1b1 f e2e2 c bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; print e;

10 Sample Graph BFS a0a0 d1d1 b1b1 f e2e2 c0c0 bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; print e; // a choice print c;

11 Sample Graph BFS a0a0 d1d1 b1b1 f1f1 e2e2 c0c0 bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; print f;

12 BFS Algorithm bfs (vertex start, tyVisit visit){ queue q = newQueue (); setDistance (start, 0); //Invariant: all vertices in q have distance property enQueue (q, start); while (q not empty) { vertex current = deQueue (q); int dist = getDistance (current); visit (current); for (each adjacent vertex u of “current”){ if (not visited u){ setDistance (u, dist+1); enQueue (q, u); } }}}

13 BFS Algorithm void bfsMain (graph g, poly start, tyVisit visit) { vertex startV = searchVertex (g, start); bfs (startV, visit); for (each vertex u in graph g) if (not visited u) bfs (q, u); }

14 Sample Graph BFS a0a0 d b fe c bfs (g, “ a ”, strOutput); Queue: a // color convention: not visited, inQueue, deQueued

15 Sample Graph BFS a0a0 d1d1 b1b1 fe c bfs (g, “ a ”, strOutput); print a; Queue: b, d Queue: a // color convention: not visited, inQueue, deQueued

16 Sample Graph BFS a0a0 d1d1 b1b1 f e2e2 c bfs (g, “ a ”, strOutput); print a; // a choice print b; Queue: b, d Queue: a Queue: d, e // color convention: not visited, inQueue, deQueued

17 Sample Graph BFS a0a0 d1d1 b1b1 f e2e2 c bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; Queue: e Queue: b, d Queue: a Queue: d, e // color convention: not visited, inQueue, deQueued

18 Sample Graph BFS a0a0 d1d1 b1b1 f e2e2 c0c0 bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; print e; Queue: Queue: e Queue: b, d Queue: a Queue: d, e Queue: c // color convention: not visited, inQueue, deQueued

19 Sample Graph BFS a0a0 d1d1 b1b1 f1f1 e2e2 c0c0 bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; Queue: Queue: e Queue: b, d Queue: a Queue: d, e Queue: c Queue: f // color convention: not visited, inQueue, deQueued

20 Sample Graph BFS a0a0 d1d1 b1b1 f1f1 e2e2 c0c0 bfs (g, “ a ”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; print f; Queue: Queue: e Queue: b, d Queue: a Queue: d, e Queue: c Queue: f Queue: // color convention: not visited, inQueue, deQueued

21 Sample Graph DFS a d b fe c Associate a “ discover time ” and a “ finish time ” with each vertex v with: discover (start) = 0

22 Sample Graph DFS a d b fe c dfs (g, “ a ”, strOutput);

23 Sample Graph DFS a (0, ) d b fe c dfs (g, “ a ”, strOutput); print a;

24 Sample Graph DFS a (0, ) d b (1, ) fe c dfs (g, “ a ”, strOutput); print a; // a choice print b;

25 Sample Graph DFS a (0, ) d b (1, ) f e (2, ) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e;

26 Sample Graph DFS a (0, ) d (3, ) b (1, ) f e (2, ) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d;

27 Sample Graph DFS a (0, ) d (3, 4) b (1, ) f e (2, ) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d;

28 Sample Graph DFS a (0, ) d (3, 4) b (1, ) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d;

29 Sample Graph DFS a (0, ) d (3, 4) b (1, 6) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d;

30 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d;

31 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c

32 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, ) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c print f

33 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, 10) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c

34 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, 10) e (2, 5) c (8, 11) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c

35 DFS Algorithm dfs (vertex start, tyVisit visit, time time) { visit (start); setDiscover (start, time++); for (each adjacent vertex u of “start”) if (not visited u) dfs (u, visit, time); setFinish (start, time++); }

36 DFS Algorithm void dfsMain (graph g, poly start, tyVisit visit) { vertex startV = searchVertex (g, start); time time = newTime (); dfs (startV, visit, time); for (each vertex u in graph g) if (not visited u) dfs (u, visit, time); }

37 Sample Graph DFS a (0, ) d b fe c dfs (g, “ a ”, strOutput); print a; dfs(a) // color convention: not visited, discover, finish

38 Sample Graph DFS a (0, ) d b (1, ) fe c dfs (g, “ a ”, strOutput); print a; // a choice print b; dfs(a) => dfs(b) // color convention: not visited, discover, finish

39 Sample Graph DFS a (0, ) d b (1, ) f e (2, ) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; dfs(a) => dfs(b) => dfs(e) // color convention: not visited, discover, finish

40 Sample Graph DFS a (0, ) d (3, ) b (1, ) f e (2, ) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; dfs(a) => dfs(b) => dfs(e) => dfs(d) // color convention: not visited, discover, finish

41 Sample Graph DFS a (0, ) d (3, ) b (1, ) f e (2, ) c dfs (g, “ a ”, natOutput); print a; // a choice print b; print e; print d; dfs(a) => dfs(b) => dfs(e) => dfs(d) => dfs(b)??? // color convention: not visited, discover, finish

42 Sample Graph DFS a (0, ) d (3, 4) b (1, ) f e (2, ) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; dfs(a) => dfs(b) => dfs(e) // color convention: not visited, discover, finish

43 Sample Graph DFS a (0, ) d (3, 4) b (1, ) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; dfs(a) => dfs(b) // color convention: not visited, discover, finish

44 Sample Graph DFS a (0, ) d (3, 4) b (1, 6) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; dfs(a) // color convention: not visited, discover, finish

45 Sample Graph DFS a (0, ) d (3, 4) b (1, 6) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; dfs(a) =>dfs(d)??? // color convention: not visited, discover, finish

46 Sample Graph DFS a (0, ) d (3, 4) b (1, 6) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; dfs(a) // color convention: not visited, discover, finish

47 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f e (2, 5) c dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; empty! // color convention: not visited, discover, finish

48 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; dfs(c) // color convention: not visited, discover, finish

49 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, ) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; dfs(c)=>dfs(f) // color convention: not visited, discover, finish

50 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, ) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; dfs(c)=>dfs(f)=>dfs(f)??? // color convention: not visited, discover, finish

51 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, ) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; dfs(c)=>dfs(f)=>dfs(f)??? // color convention: not visited, discover, finish

52 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, 10) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; dfs(c) // color convention: not visited, discover, finish

53 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, 10) e (2, 5) c (8, ) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; dfs(c)=>dfs(e)??? // color convention: not visited, discover, finish

54 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, 10) e (2, 5) c (8, 11) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; dfs(c) // color convention: not visited, discover, finish

55 Sample Graph DFS a (0, 7) d (3, 4) b (1, 6) f (9, 10) e (2, 5) c (8, 11) dfs (g, “ a ”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; print f; empty! // color convention: not visited, discover, finish

56 Edge Classification Once we obtain the DFS (or BFS) spanning trees (forests), the graph edges could be classified according to the trees: tree edges: edges in the trees forward edges: ancestors to descants back edges: descants to ancestors cross edges: others

57 Edge Classification Example a d b fe c tree edges: a->b, b->e, e->d, c->f forward edges: a->d back edges: d->b, f->f cross edges: c->e

58 Edge Classification Algorithm Based on discover and finish time, for each edge e=(u, v): if v not visited, e is tree edge if v not finished, e is back edge if v finished if discover(u)<discover(v), e is forward edge if discover(u)>discover(v), e is cross edge

59 Edge Classification Algorithm dfs (vertex start, tyVisit visit, time time) { visit (start); setDiscover (start, time++); for (each edge e=(start, v)) { if (not visited v) { dfs (v, visit, time); classifyEdge (e, “TreeEdge”); } else { if (not setFinish v) classifyEdge (e, “BackEdge”); else { // leave to you } setFinish (start, time++); }

60 DFS Algorithm void dfsMain (graph g, poly start, tyVisit visit) { vertex startV = searchVertex (g, start); time time = newTime (); dfs (startV, visit, time); for (each vertex u in graph g) if (not visited u) dfs (u, visit, time); }

61 BFS and DFS Application #1: Topological Sorting

62 An Example: Hasse Diagram 1 25 20 4 12 From Rosen ’ s book

63 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1

64 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2

65 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 4

66 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 4, 12

67 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 4, 12, 5

68 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 4, 12, 5, 20

69 Source-queue Topological Sorting Algorithm topoSortBfs (graph g) { for (each vertex v) calculate in-degree for v; // vertices in queue q are candidates for // deletion queue q = newQueue (); for (each vertex v) if (in-degree of v ==0) enQueue (q, v);

70 Source-queue Topological Sorting Algorithm (cont ’ ) while (q not empty) { vertex current = deQueue (q); for (each edge e=(current, v)) if (not visited v) { in-degree of v --; if (in-degree of v ==0) enQueue (q, v); } // BFS-based algorithm

71 An Example: Hasse Diagram 1 25 20 4 12 Source queue: 1 // color convention: not visited, enQueue, deQueue

72 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1 Source queue: 2, 5

73 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2 Source queue: 5, 4

74 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 5 Source queue: 4 // Note that we don ’ t // enQueue 20!!

75 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 5, 4 Source queue: 12, 20 // a chance

76 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 5, 4, 12 Source queue: 20

77 An Example: Hasse Diagram 1 25 20 4 12 Sorted Sequence: 1, 2, 5, 4, 12, 20 Source queue: empty!

78 DFS-based Algorithm 1 25 20 4 12 DFS from 4:

79 DFS-based Algorithm 1 (6, 11) 2 (7, 8) 5 (9, 10) 20 (3, 4) 4 (0, 5) 12 (1, 2) DFS from 4: When each vertex v finishes, insert v onto head of a linked list

80 Topological Sorting Algorithm dfs (vertex start, tyVisit visit, linkedList list) { visit (start); for (each edge e=(start, v)) // as before … linkedListInsertHead (list, start) }

81 DFS Algorithm linkedList topoSortDfs (graph g, poly start, tyVisit visit) { vertex startV = searchVertex (g, start); linkedList list = newLinkedList (); dfs (startV, visit, list); for (each vertex u in graph g) if (not visited u) dfs (u, visit, list); return list; }

82 Some Extra Programming Assignments Simple path: is there a simple path from vertex u to v? Or, are vertices u and v connected? Is an undirected g connected? Or, how many connected components are there in g? Cycle detection: is there a cycle in a digraph g? Two colorability: is it possible to color all the vertices in a digraph g using two colors, such that no adjacent vertices are of the same color?


Download ppt "Graph Traversal Discrete Mathematics and Its Applications Baojian Hua"

Similar presentations


Ads by Google