ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,

Slides:



Advertisements
Similar presentations
Tort Law: Concurrent Tortfeasors Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Advertisements

Graphs CSC 220 Data Structure. Introduction One of the Most versatile data structures like trees. Terminology –Nodes in trees are vertices in graphs.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Breadth-First and Depth-First Search
Chapter 8, Part I Graph Algorithms.
© 2006 Pearson Addison-Wesley. All rights reserved14 A-1 Chapter 14 excerpts Graphs (breadth-first-search)
Graphs COL 106 Slide Courtesy : Douglas W. Harder, U Waterloo.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Contract Law, Tort and Intellectual Property Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Breadth First Search (BFS) Part 2 COMP171. Graph / Slide 2 Shortest Path Recording * BFS we saw only tells us whether a path exists from source s, to.
Depth-First Search Lecture 24 COMP171 Fall Graph / Slide 2 Depth-First Search (DFS) * DFS is another popular graph search strategy n Idea is similar.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Algorithm design techniques
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Tort Law: Negligence Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo, Ontario, Canada.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo, Ontario, Canada ece.uwaterloo.ca.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
CS261 Data Structures DFS and BFS – Edge List Representation.
Search Related Algorithms. Graph Code Adjacency List Representation:
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo, Ontario, Canada ece.uwaterloo.ca.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Trees : Part 1 Section 4.1 (1) Theory and Terminology (2) Preorder, Postorder and Levelorder Traversals.
Graph Introduction, Searching Graph Theory Basics - Anil Kishore.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo, Ontario, Canada ece.uwaterloo.ca.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
1 Directed Graphs Chapter 8. 2 Objectives You will be able to: Say what a directed graph is. Describe two ways to represent a directed graph: Adjacency.
COSC 2007 Data Structures II
© 2006 Pearson Addison-Wesley. All rights reserved 14 A-1 Chapter 14 Graphs.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
1 Linked Lists Assignment What about assignment? –Suppose you have linked lists: List lst1, lst2; lst1.push_front( 35 ); lst1.push_front( 18 ); lst2.push_front(
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
1 Graph theory Outline A graph is an abstract data type for storing adjacency relations –We start with definitions: Vertices, edges, degree and sub-graphs.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
© 2006 Pearson Addison-Wesley. All rights reserved14 B-1 Chapter 14 (continued) Graphs.
The mechanics of recursion
Topological Sort In this topic, we will discuss: Motivations
unweighted path lengths
Poisson distribution.
Node-based storage with arrays
All-pairs shortest path
Outline This topic covers Prim’s algorithm:
COMP171 Depth-First Search.
Presentation transcript:

ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo, Ontario, Canada ece.uwaterloo.ca © by Douglas Wilhelm Harder. Some rights reserved. Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo, Ontario, Canada ece.uwaterloo.ca © by Douglas Wilhelm Harder. Some rights reserved. Graph theory

2 Graph traversals Outline We will look at traversals of graphs –Breadth-first or depth-first traversals –Must avoid cycles –Depth-first traversals can be recursive or iterative –Problems that can be solved using traversals

3 Graph traversals Strategies Traversals of graphs are also called searches We can use either breadth-first or depth-first traversals –Breadth-first requires a queue –Depth-first requires a stack We each case, we will have to track which vertices have been visited requiring  (|V|) memory –One option is a hash table –If we can use a bit array, this requires only |V|/8 bytes The time complexity cannot be better than and should not be worse than  (|V| + |E|) –Connected graphs simplify this to  (|E|) –Worst case:  (|V |2 )

4 Graph traversals Breadth-first traversal Consider implementing a breadth-first traversal on a graph: –Choose any vertex, mark it as visited and push it onto queue –While the queue is not empty: Pop to top vertex v from the queue For each vertex adjacent to v that has not been visited: –Mark it visited, and –Push it onto the queue This continues until the queue is empty –Note: if there are no unvisited vertices, the graph is connected,

5 Graph traversals Iterative depth-first traversal An implementation can use a queue void Graph::depth_first_traversal( Vertex *first ) const { Hash_table hash; hash.insert( first ); std::queue queue; queue.push( first ); while ( !queue.empty() ) { Vertex *v = queue.front(); queue.pop(); // Perform an operation on v for ( Vertex *w : v->adjacent_vertices() ) { if ( !hash.member( w ) ) { hash.insert( w ); stack.push( w ); }

6 Graph traversals Breadth-first traversal The size of the queue is O(|V|) –The size depends both on: The number of edges, and The out-degree of the vertices

7 Graph traversals Depth-first traversal Consider implementing a depth-first traversal on a graph: –Choose any vertex, mark it as visited –From that vertex: If there is another adjacent vertex not yet visited, go to it Otherwise, go back to the most previous vertex that has not yet had all of its adjacent vertices visited and continue from there –Continue until no visited vertices have unvisited adjacent vertices Two implementations: –Recursive –Iterative

8 Graph traversals Recursive depth-first traversal A recursive implementation uses the call stack for memory: void Graph::depth_first_traversal( Vertex *first ) const { Hash_table hash; hash.insert( first ); first->depth_first_traversal( hash ); } void Vertex::depth_first_traversal( Hash_table hash ) const { // Perform an operation on this for ( Vertex *v : adjacent_vertices() ) { if ( !hash.member( v ) ) { hash.insert( v ); v->depth_first_traversal( hash ); }

9 Graph traversals Iterative depth-first traversal An iterative implementation can use a stack void Graph::depth_first_traversal( Vertex *first ) const { Hash_table hash; hash.insert( first ); std::stack stack; stack.push( first ); while ( !stack.empty() ) { Vertex *v = stack.top(); stack.pop(); // Perform an operation on v for ( Vertex *w : v->adjacent_vertices() ) { if ( !hash.member( w ) ) { hash.insert( w ); stack.push( w ); }

10 Graph traversals Iterative depth-first traversal If memory is an issue, we can reduce the stack size: –For the vertex: Mark it as visited Perform an operation on that vertex Place it onto an empty stack –While the stack is not empty: If the vertex on the top of the stack has an unvisited adjacent vertex, –Mark it as visited –Perform an operation on that vertex –Place it onto the top of the stack Otherwise, pop the top of the stack

11 Graph traversals Standard Template Library (STL) approach An object-oriented STL approach would be create a iterator class: –The hash table and stack/queue are private member variables created in the constructor –Internally, it would store the current node –The auto-increment operator would pop the top of the stack and place any unvisited adjacent vertices onto the stack/queue –The auto-decrement operator would not be implemented You can’t go back…

12 Graph traversals Example Consider this graph

13 Graph traversals Example Performing a breadth-first traversal –Push the first vertex onto the queue A

14 Graph traversals Example Performing a breadth-first traversal –Pop A and push B, C and E A BCE

15 Graph traversals Example Performing a breadth-first traversal: –Pop B and push D A, B CED

16 Graph traversals Example Performing a breadth-first traversal: –Pop C and push F A, B, C EDF

17 Graph traversals Example Performing a breadth-first traversal: –Pop E and push G and H A, B, C, E DFGH

18 Graph traversals Example Performing a breadth-first traversal: –Pop D A, B, C, E, D FGH

19 Graph traversals Example Performing a breadth-first traversal: –Pop F A, B, C, E, D, F GH

20 Graph traversals Example Performing a breadth-first traversal: –Pop G and push I A, B, C, E, D, F, G HI

21 Graph traversals Example Performing a breadth-first traversal: –Pop H A, B, C, E, D, F, G, H I

22 Graph traversals Example Performing a breadth-first traversal: –Pop I A, B, C, E, D, F, G, H, I

23 Graph traversals Example Performing a breadth-first traversal: –The queue is empty: we are finished A, B, C, E, D, F, G, H, I

24 Graph traversals Example Perform a recursive depth-first traversal on this same graph

25 Graph traversals Example Performing a recursive depth-first traversal: –Visit the first node A

26 Graph traversals Example Performing a recursive depth-first traversal: –A has an unvisited neighbor A, B

27 Graph traversals Example Performing a recursive depth-first traversal: –B has an unvisited neighbor A, B, C

28 Graph traversals Example Performing a recursive depth-first traversal: –C has an unvisited neighbor A, B, C, D

29 Graph traversals Example Performing a recursive depth-first traversal: –D has no unvisited neighbors, so we return to C A, B, C, D, E

30 Graph traversals Example Performing a recursive depth-first traversal: –E has an unvisited neighbor A, B, C, D, E, G

31 Graph traversals Example Performing a recursive depth-first traversal: –F has an unvisited neighbor A, B, C, D, E, G, I

32 Graph traversals Example Performing a recursive depth-first traversal: –H has an unvisited neighbor A, B, C, D, E, G, I, H

33 Graph traversals Example Performing a recursive depth-first traversal: –We recurse back to C which has an unvisited neighbour A, B, C, D, E, G, I, H, F

34 Graph traversals Example Performing a recursive depth-first traversal: –We recurse finding that no other nodes have unvisited neighbours A, B, C, D, E, G, I, H, F

35 Graph traversals Comparison Performing a recursive depth-first traversal: –We recurse finding that no other nodes have unvisited neighbours A, B, C, D, E, G, I, H, F

36 Graph traversals The order in which vertices can differ greatly –An iterative depth-first traversal may also be different again Comparison A, B, C, D, E, G, I, H, FA, B, C, E, D, F, G, H, I

37 Graph traversals Applications Applications of tree traversals include: –Determining connectiveness and finding connected sub-graphs –Determining the path length from one vertex to all others –Testing if a graph is bipartite –Determining maximum flow –Cheney’s algorithm for garbage collection

38 Graph traversals Summary This topic covered graph traversals –Considered breadth-first and depth-first traversals –Depth-first traversals can recursive or iterative –More overhead than traversals of rooted trees –Considered a STL approach to the design –Considered an example with both implementations –They are also called searches

39 Graph traversals References Wikipedia, These slides are provided for the ECE 250 Algorithms and Data Structures course. The material in it reflects Douglas W. Harder’s best judgment in light of the information available to him at the time of preparation. Any reliance on these course slides by any party for any other purpose are the responsibility of such parties. Douglas W. Harder accepts no responsibility for damages, if any, suffered by any party as a result of decisions made or actions based on these course slides for any other purpose than that for which it was intended.