Matemática Discretapara Engenheiros

Estruturas, provas e intuição

EN | PT

Busca em Largura (BFS)

Parte 7 — Aplicações

Série: Busca em Largura (BFS) Parte 7 de 8

7. Aplicações


Roteiro (o que você aprenderá nesta parte):
  1. Caminhos mínimos em grafos não ponderados
  2. Busca de caminho em grades (jogos, robótica)
  3. Conectividade e alcançabilidade
  4. Verificação de bipartição (duas cores)
  5. Componentes conexas (grafos não direcionados)
  6. Níveis, propagação e “graus de separação”
  7. Padrões de engenharia: roteamento, breadcrumbs, impacto de dependências

A BFS é um dos algoritmos de grafos mais práticos na engenharia. Sempre que as arestas representam custo unitário (um salto, um movimento, um passo), a BFS se torna a ferramenta padrão.

Nesta parte, conectamos a teoria a tarefas do mundo real que você verá em sistemas, produtos e entrevistas.

7.1 Caminhos Mínimos (Grafos Não Ponderados)

Se cada aresta tem o mesmo “custo” (1 salto), a BFS calcula as distâncias de caminho mínimo:

d[v] = δ(s, v)

E os ponteiros de predecessor π permitem reconstruir o caminho (Parte 6).

Casos de uso: grafos sociais, roteamento por número de saltos, menor “caminho de cliques” em um mapa do site.

7.2 Busca de Caminho em Grades (Jogos & Robótica)

Uma grade 2D pode ser modelada como um grafo:

  • Cada célula é um vértice
  • Arestas conectam movimentos válidos para vizinhos (vizinhança-4 ou vizinhança-8)
  • Paredes/obstáculos removem vértices ou arestas

A BFS encontra o menor número de movimentos do início até o objetivo.

Problemas clássicos: menor caminho em um labirinto, mínimo de passos em uma grade, flood-fill com distâncias.

7.3 Alcançabilidade & Conectividade

A BFS responde: “consigo chegar lá a partir daqui?”:

  • Execute BFS a partir de s
  • Todos os vértices descobertos são alcançáveis
Casos de uso: grafos de controle de acesso, alcançabilidade em dependências, checagens de conectividade em redes.

7.4 Componentes Conexas (Grafos Não Direcionados)

Para encontrar todas as componentes conexas:

  1. Marque todos os vértices como não visitados
  2. Para cada vértice não visitado, execute BFS e marque toda a sua componente
  3. Cada execução de BFS descobre exatamente uma componente

O tempo total permanece linear:

O(|V| + |E|)
Casos de uso: agrupamento por conectividade, detectar sub-redes isoladas, agrupar usuários por conectividade.

7.5 Verificação de Bipartição (Duas Cores)

A BFS pode testar se um grafo é bipartido usando duas cores por camadas:

  • Atribua a cor A a s
  • Todos os vizinhos devem ter a cor B
  • Vizinhos de B devem ter A, e assim por diante
  • Se uma aresta conecta vértices da mesma cor, o grafo não é bipartido
Casos de uso: grafos de conflito, restrições de escalonamento, checar se o grafo possui ciclo ímpar.

7.6 Níveis, Propagação e “Graus de Separação”

A BFS naturalmente calcula camadas:

Significado da camada: Lk = { v ∈ V ∣ d[v] = k }

Isso modela processos de espalhamento:

  • Propagação de mensagens (saltos)
  • Tempo mínimo em passos discretos de difusão
  • Consultas do tipo “amigos a até 2 saltos”
Insight de engenharia: Cálculos por camadas muitas vezes são mais valiosos do que o caminho em si.

7.7 Padrões de Engenharia

BFS é um padrão, não apenas um algoritmo:

  • Roteamento por número de saltos: menor número de hops em redes overlay
  • Breadcrumbs / ponteiros de pai: guardar pais para reconstruir caminhos ou navegação de UI
  • Análise de impacto: “o que depende disso?” (grafos de dependência)
  • Busca em espaço de estados: explorar transições com número mínimo de passos
Resumo: Quando seu sistema pode ser modelado como “estados” e “transições unitárias”, a BFS costuma ser a primeira ferramenta a testar.

Próxima: Parte 8 — BFS vs DFS

Já vimos o que a BFS faz e onde ela se destaca. Agora vamos colocá-la lado a lado com a Busca em Profundidade (DFS): como a ordem de exploração muda, quais estruturas cada uma produz, e como escolher a travessia certa para problemas de engenharia.