🕸️ Breadth-First Search (BFS)
Introdução
O Breadth-First Search (BFS) é um algoritmo de busca em grafos que explora primeiro todos os vizinhos de um vértice, antes de avançar para o próximo "nível" de vizinhos. Ele é muito utilizado para encontrar o menor caminho em grafos não ponderados.
Como funciona
- Comece a partir de um vértice origem e coloque-o em uma fila.
- Marque o vértice como visitado.
- Enquanto a fila não estiver vazia:
- Retire um vértice da fila.
- Visite todos os seus vizinhos ainda não visitados.
- Marque esses vizinhos como visitados e coloque-os na fila.
Implementação (Python)
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)
while queue:
node = queue.popleft()
print(node, end=" ")
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# Exemplo de uso
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E'],
}
bfs(graph, 'A') # Saída: A B C D E F
Aplicações
- Encontrar o menor caminho em grafos não ponderados.
- Implementação de web crawlers.
- Análise de redes sociais (nível de conexão entre pessoas).
- Broadcast em redes.
- Resolução de quebra-cabeças (como word ladder, variações de labirinto, etc.).
Complexidade
- Tempo: O(V + E), onde V é o número de vértices e E é o número de arestas.
- Espaço: O(V), devido à fila e ao conjunto de vértices visitados.
Quando usar BFS
- Quando você precisa do menor número de passos em um grafo não ponderado.
- Quando deseja explorar todos os nós de um nível antes de ir mais fundo.
Algoritmos relacionados
- Depth-First Search (DFS): explora o grafo indo o mais fundo possível antes de voltar.
- Dijkstra: encontra o menor caminho em grafos ponderados com pesos não negativos.