Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 CSE 326: Data Structures: Graphs Lecture 19: Monday, Feb 24, 2003.

Similar presentations


Presentation on theme: "1 CSE 326: Data Structures: Graphs Lecture 19: Monday, Feb 24, 2003."— Presentation transcript:

1 1 CSE 326: Data Structures: Graphs Lecture 19: Monday, Feb 24, 2003

2 2 Outline Graphs: –Definitions –Properties –Examples Topological Sort Graph Traversals –Depth First Search –Breadth First Search TO DO: READ WEISS CH 9

3 3 Graphs Graphs = formalism for representing relationships between objects A graph G = (V, E) –V is a set of vertices –E  V  V is a set of edges Han Leia Luke V = {Han, Leia, Luke} E = {(Luke, Leia), (Han, Leia), (Leia, Han)}

4 4 Directed vs. Undirected Graphs Han Leia Luke Han Leia Luke In directed graphs, edges have a specific direction: In undirected graphs, they don’t (edges are two-way): Vertices u and v are adjacent if (u, v)  E

5 5 Weighted Graphs 20 30 35 60 Mukilteo Edmonds Seattle Bremerton Bainbridge Kingston Clinton There may be more information in the graph as well. Each edge has an associated weight or cost.

6 6 Paths and Cycles A path is a list of vertices {v 1, v 2, …, v n } such that (v i, v i+1 )  E for all 0  i < n. A cycle is a path that begins and ends at the same node. Seattle San Francisco Dallas Chicago Salt Lake City p = {Seattle, Salt Lake City, Chicago, Dallas, San Francisco, Seattle}

7 7 Path Length and Cost Path length: the number of edges in the path Path cost: the sum of the costs of each edge Seattle San Francisco Dallas Chicago Salt Lake City 3.5 2 2 2.5 3 2 length(p) = 5cost(p) = 11.5

8 8 Connectivity Undirected graphs are connected if there is a path between any two vertices Directed graphs are strongly connected if there is a path from any one vertex to any other

9 9 Connectivity Directed graphs are weakly connected if there is a path between any two vertices, ignoring direction A complete graph has an edge between every pair of vertices

10 10 Connectivity A (strongly) connected component is a subgraph which is (strongly) connected CC in an undirected graph: SCC in a directed graph:

11 11 Distance and Diameter The distance between two nodes, d(u,v), is the length of the shortest paths, or  if there is no path The diameter of a graph is the largest distance between any two nodes Graph is strongly connected iff diameter < 

12 12 An Interesting Graph The Web ! Each page is a vertice Each hyper-link is an edge How many nodes ? Is it connected ? What is its diameter ?

13 13 The Web Graph

14 14 Other Graphs Geography: –Cities and roads –Airports and flights (diameter  20 !!) Publications: –The co-authorship graph E.g. the Erdos distance –The reference graph Phone calls: who calls whom Almost everything can be modeled as a graph !

15 15 Graph Representation 1: Adjacency Matrix A |V| x |V| array in which an element (u, v) is true if and only if there is an edge from u to v Han Leia Luke HanLukeLeia Han Luke Leia Runtime: iterate over vertices iterate ever edges iterate edges adj. to vertex edge exists? Space requirements:

16 16 Graph Representation 2: Adjacency List A |V| -ary list (array) in which each entry stores a list (linked list) of all adjacent vertices Han Leia Luke Han Luke Leia space requirements: Runtime: iterate over vertices iterate ever edges iterate edges adj. to vertex edge exists?

17 17 Graph Density A sparse graph has O(|V|) edges A dense graph has  (|V| 2 ) edges Anything in between is either sparsish or densy depending on the context.

18 18 Trees as Graphs Every tree is a graph with some restrictions: –the tree is directed –there are no cycles (directed or undirected) –there is a directed path from the root to every node A B DE C F HG JI BAD!

19 19 Directed Acyclic Graphs (DAGs) DAGs are directed graphs with no cycles. main() add() access() mult() read() Trees  DAGs  Graphs if program call graph is a DAG, then all procedure calls can be in-lined

20 20 Application of DAGs: Representing Partial Orders check in airport call taxi taxi to airport reserve flight pack bags take flight locate gate

21 21 Topological Sort Given a graph, G = (V, E), output all the vertices in V such that no vertex is output before any other vertex with an edge to it. check in airport call taxi taxi to airport reserve flight pack bags take flight locate gate

22 22 Topological Sort check in airport call taxi taxi to airport reserve flight pack bags take flight locate gate

23 23 Topo-Sort Take One Label each vertex’s in-degree (# of inbound edges) While there are vertices remaining Pick a vertex with in-degree of zero and output it Reduce the in-degree of all vertices adjacent to it Remove it from the list of vertices Label each vertex’s in-degree (# of inbound edges) While there are vertices remaining Pick a vertex with in-degree of zero and output it Reduce the in-degree of all vertices adjacent to it Remove it from the list of vertices runtime:

24 24 Topo-Sort Take Two Label each vertex’s in-degree Initialize a queue to contain all in-degree zero vertices While there are vertices remaining in the queue Remove a vertex v with in-degree of zero and output it Reduce the in-degree of all vertices adjacent to v Put any of these with new in-degree zero on the queue Label each vertex’s in-degree Initialize a queue to contain all in-degree zero vertices While there are vertices remaining in the queue Remove a vertex v with in-degree of zero and output it Reduce the in-degree of all vertices adjacent to v Put any of these with new in-degree zero on the queue runtime: Can we use a stack instead of a queue ?

25 25 Topo-Sort So we sort again in linear time: O(|V|+|E|) Can we apply this to normal sorting ? If we sort an array A[1], A[2],..., A[n] using topo-sort, what is the running time ?

26 26 Recall: Tree Traversals a i d hj b f kl e c g a b f g k c d h i l j e

27 27 Depth-First Search Pre/Post/In – order traversals are examples of depth-first search –Nodes are visited deeply on the left-most branches before any nodes are visited on the right-most branches Visiting the right branches deeply before the left would still be depth-first! Crucial idea is “go deep first!” Difference in pre/post/in-order is how some computation (e.g. printing) is done at current node relative to the recursive calls In DFS the nodes “being worked on” are kept on a stack

28 28 DFS void DFS(Node startNode) { Stack s = new Stack; s.push(startNode); while (!s.empty()) { x = s.pop(); /* process x */ for y in x.children() do s.push(y); } void DFS(Node startNode) { Stack s = new Stack; s.push(startNode); while (!s.empty()) { x = s.pop(); /* process x */ for y in x.children() do s.push(y); }

29 29 DFS on Trees a i d hj b f kl e c g a b g k

30 30 DFS on Graphs a i d hj b f kl e c g a b g k Problem with cycles: may run into an infinite loop

31 31 DFS Running time: void DFS(Node startNode) { for v in Nodes do v.visited = false; Stack s = new Stack; s.push(startNode); while (!s.empty()) { x = s.pop(); x.visited = true; /* process x */ for y in x.children() do if (!y.visited) s.push(y); } void DFS(Node startNode) { for v in Nodes do v.visited = false; Stack s = new Stack; s.push(startNode); while (!s.empty()) { x = s.pop(); x.visited = true; /* process x */ for y in x.children() do if (!y.visited) s.push(y); }

32 32 Breadth-First Search Traversing tree level by level from top to bottom (alphabetic order) a i d hj b f kl e c g

33 33 Breadth-First Search BFS characteristics Nodes being worked on maintained in a FIFO Queue, not a stack Iterative style procedures often easier to design than recursive procedures

34 34 Breadth-First Search void DFS(Node startNode) { for v in Nodes do v.visited = false; Stack s = new Stack; s.push(startNode); while (!s.empty()) { x = s.pop(); x.visited = true; /* process x */ for y in x.children() do if (!y.visited) s.push(y); } void DFS(Node startNode) { for v in Nodes do v.visited = false; Stack s = new Stack; s.push(startNode); while (!s.empty()) { x = s.pop(); x.visited = true; /* process x */ for y in x.children() do if (!y.visited) s.push(y); } void BFS(Node startNode) { for v in Nodes do v.visited = false; Queue s = new Queue; s.enqueue(startNode); while (!s.empty()) { x = s.dequeue(); x.visited = true; /* process x */ for y in x.children() do if (!y.visited) s.enqueue(y); } void BFS(Node startNode) { for v in Nodes do v.visited = false; Queue s = new Queue; s.enqueue(startNode); while (!s.empty()) { x = s.dequeue(); x.visited = true; /* process x */ for y in x.children() do if (!y.visited) s.enqueue(y); }

35 35 QUEUE a b c d e c d e f g d e f g e f g h i j f g h i j g h i j h i j k i j k j k l k l l a i d hj b f kl e c g

36 36 Graph Traversals DFS and BFS Either can be used to determine connectivity: –Is there a path between two given vertices? –Is the graph (weakly) connected? Important difference: Breadth-first search always finds a shortest path from the start vertex to any other (for unweighted graphs) –Depth first search may not!


Download ppt "1 CSE 326: Data Structures: Graphs Lecture 19: Monday, Feb 24, 2003."

Similar presentations


Ads by Google