1 / 15

Breadth-First Search

L 0. A. L 1. B. C. D. L 2. E. F. Breadth-First Search. A general technique for traversing a graph BFS traversal of graph G Visits all the vertices and edges of G Determines whether G is connected Computes the connected components of G Computes a spanning forest of G.

cwilbert
Download Presentation

Breadth-First Search

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. L0 A L1 B C D L2 E F Breadth-First Search Breadth-First Search

  2. A general technique for traversing a graph BFS traversal of graph G Visits all the vertices and edges of G Determines whether G is connected Computes the connected components of G Computes a spanning forest of G Complexity: O(n + m ) for a graph with n vertices and m edges BFS for other graph problems Find a minimum path between two given vertices Find a simple cycle BFS is to graphs what level-order is to binary/general rooted trees Breadth-First Search (BFS) Breadth-First Search

  3. BFS Algorithm AlgorithmBFS(G, s) L0new empty sequence L0.insertBack(s) s.setLabel(VISITED) i  0 while Li.empty() Li +1new empty sequence for all v  Li.elements() for all e  v.incidentEdges() ife.getLabel() = UNEXPLORED w e.opposite(v) if w.getLabel() = UNEXPLORED e.setLabel(DISCOVERY) w.setLabel(VISITED) Li +1.insertBack(w) else e.setLabel(CROSS) i  i +1 • The algorithm uses a mechanism for setting and getting “labels” of vertices and edges AlgorithmBFS(G) Inputgraph G Outputlabeling of the edges and partition of the vertices of G for all u  G.vertices() u.setLabel(UNEXPLORED) for all e  G.edges() e.setLabel(UNEXPLORED) for all v  G.vertices() ifv.getLabel() = UNEXPLORED BFS(G, v) Breadth-First Search

  4. Example via Queue Quiz! • Start vertex: 0 • Traverse order: 0, 1, 2, 3, 4, 5, 6, 7 • Queue contents at each step: OutputQueue 0 0 1 2 1 2 0 3 4 2 3 4 0 5 6 3 4 5 6 1 7 4 5 6 7 1 7 5 6 7 7 2 7 6 7 7 7 2 7 7 7 7 7 3 4 5 6 0 vertex 0 -> 1 -> 2 vertex 1 -> 0 -> 3 -> 4 vertex 2 -> 0 -> 5 -> 6 vertex 3 -> 1 -> 7 vertex 4 -> 1 -> 7 vertex 5 -> 2 -> 7 vertex 6 -> 2 -> 7 vertex 7 -> 3 -> 4 -> 5 -> 6 2 1 6 5 4 3 7 Depth-First Search Level-order!

  5. Another Example via Queue • Start vertex: 4 • Traverse order: 4, 1, 7, 0, 3, 5, 6, 2 • Queue contents at each step: 0 vertex 0 -> 1 -> 2 vertex 1 -> 0 -> 3 -> 4 vertex 2 -> 0 -> 5 -> 6 vertex 3 -> 1 -> 7 vertex 4 -> 1 -> 7 vertex 5 -> 2 -> 7 vertex 6 -> 2 -> 7 vertex 7 -> 3 -> 4 -> 5 -> 6 2 1 6 5 4 3 7 Depth-First Search

  6. L0 A L1 B C D E F Example unexplored vertex A visited vertex A unexplored edge discovery edge cross edge L0 L0 A A L1 L1 B C D B C D E F E F Breadth-First Search

  7. L0 L0 A A L1 L1 B C D B C D L2 E F E F L0 L0 A A L1 L1 B C D B C D L2 L2 E F E F Example (cont.) Breadth-First Search

  8. L0 L0 A A L1 L1 B C D B C D L2 L2 E F E F Example (cont.) L0 A L1 B C D L2 E F Animation Breadth-First Search

  9. Notation Gs: connected component of s Property 1 BFS(G, s) visits all the vertices and edges of Gs Property 2 The discovery edges labeled by BFS(G, s) form a spanning tree Ts of Gs Property 3 For each vertex v in Li The path of Ts from s to v has i edges Every path from s to v in Gshas at least i edges Properties A B C D E F L0 A L1 B C D L2 E F Breadth-First Search

  10. Setting/getting a vertex/edge label takes O(1) time Each vertex is labeled twice once as UNEXPLORED once as VISITED Each edge is labeled twice once as UNEXPLORED once as DISCOVERY or CROSS Each vertex is inserted once into a sequence Li Method incidentEdges is called once for each vertex BFS runs in O(n + m) time provided the graph is represented by the adjacency list structure Recall that Sv deg(v)= 2m Analysis Breadth-First Search

  11. Applications • Using the template method pattern, we can specialize the BFS traversal of a graph Gto solve the following problems in O(n + m) time • Compute the connected components of G • Compute a spanning forest of G • Find a simple cycle in G, or report that G is a forest • Given two vertices of G, find a path in G between them with the minimum number of edges, or report that no such path exists Breadth-First Search

  12. Comparison: DFS vs. BFS • DFS • Complexity: O(m+n) • Like preorder for binary trees • Can be achieved by a stack • Path finding with low memory • Game solution finding, such as maze traversal, 2048, nonograms, etc. • BFS • Complexity: O(m+n) • Like level-order for binary tress • Can be achieved by a queue • Minimum path finding Breadth-First Search

  13. L0 A L1 B C D L2 E F DFS vs. BFS A B C D E F DFS BFS Breadth-First Search

  14. Back edge(v,w) w is an ancestor of v in the tree of discovery edges Cross edge(v,w) w is in the same level as v or in the next level L0 A L1 B C D L2 E F DFS vs. BFS (cont.) A B C D E F DFS BFS Breadth-First Search

  15. Applications of BFS • BFS applications • Shortest path in a unweighted graph • Web crawler • Social network • Cycle detection • Bipartite graph determination • Broadcasting in a network • Folk-Fulkerson algorithm Breadth-First Search

More Related