| Breadth-first search | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| General Data | ||||||||||||
| Class: | Search Algorithm |
| Data Structure: | Graph |
| Time Complexity: | O( >V |
| Space Complexity: | O( >V |
| Optimal: | no |
| Complete: | yes |
Formally, BFS is an uninformed search method that aims to expand and examine all nodes of a graph systematically in search of a solution. In other words, it exhaustively searches the entire graph without considering the goal until it finds it. It does not use a heuristic.
From the standpoint of the algorithm, all child nodes obtained by expanding a node are added to a FIFO queue. In typical implementations, nodes that have not yet been examined for their neighbors are placed in some container (such as a queue or linked list) called "open" and then once examined are placed in the container "closed".
bfs(v) enqueue(v) mark v as visited while queue not empty v=dequeue() process(v) for all unvisited vertices i adjacent to v mark i as visited enqueue(i)
Since all nodes discovered so far have to be saved, the space complexity of breadth-first search is O(|V| + |E|) where |V| is the number of nodes and |E| the number of edges in the graph. Note: another way of saying this is that it is O(B ^ M) where B is the maximum branching factor and M is the maximum path length of the tree. This immense demand for space is the reason why breadth-first search is impractical for larger problems.
Since in the worst case breadth-first search has to consider all paths to all possible nodes the time complexity of breadth-first search is O(|V| + |E|) where |V| is the number of nodes and |E| the number of edges in the graph.
Breadth-first search is complete. This means that if there is a solution breadth-first search will find it regardless of the kind of graph. However, if the graph is infinite and there is no solution breadth-first search will diverge.
In general breadth-first search is not optimal since it always returns the result with the fewest edges between the start node and the goal node. If the graph is a weighted graph, and therefore has costs associated with each step, a goal next to the start does not have to be the cheapest goal available. This problem is solved by improving breadth-first search to uniform-cost search which considers the path costs. Nevertheless, if the graph is not weighted, and therefore all step costs are equal, breadth-first search will find the nearest and the best solution.
Breadth-first search can be used to solve many problems in graph theory, for example:
The set of nodes reached by a BFS are the largest connected component containing the start node.
If there are edges joining nodes in the same BFS layer, then the graph must contain an odd length cycle and be non-bipartite.
Trees (structure) | Search algorithms
Cerca en profunditat | Breitensuche | Búsqueda en anchura | Algorithme de parcours en largeur | אלגוריתם חיפוש לרוחב | Paieška į plotį | 幅優先探索 | Przeszukiwanie wszerz | Busca em largura | Поиск в ширину
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Breadth-first search".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world