Matemática Discretapara Engenheiros

Estruturas, provas e intuição

EN | PT

Busca em Largura (BFS)

Parte 1 — Modelo de Grafo e Formulação do Problema

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

Modelo de Grafo e Formulação do Problema


1. Por que começar pelo modelo?

Antes de discutir algoritmos, devemos definir precisamente qual problema estamos resolvendo.

A Busca em Largura não é apenas uma técnica de percurso.
Ela é um algoritmo de caminho mínimo em teoria dos grafos para uma estrutura matemática específica.

Começamos, portanto, pelo objeto:

G = (V, E)

Onde:

  • V = conjunto de vértices
  • E ⊆ V × V = conjunto de arestas

Esta é a base formal apresentada em Introduction to Algorithms.

2. Grafos orientados e não orientados

Distinguimos dois modelos fundamentais.

Grafo orientado (dígrafo)
E ⊆ V × V

As arestas têm orientação: se (u, v) ∈ E, você pode ir de u para v, mas não necessariamente de v para u.

Grafo não orientado
E ⊆ {{u, v} ∣ u, v ∈ V}

As arestas são simétricas: se u é adjacente a v, então v é adjacente a u.

A BFS funciona em ambos os modelos.

3. Representação do grafo

Um algoritmo precisa operar sobre uma representação de dados de G.

3.1 Lista de adjacência (recomendada)

Cada vértice armazena uma lista de seus vizinhos:

Adj[u] = { v ∈ V ∣ (u, v) ∈ E }

Esta é a representação padrão no CLRS porque ela resulta em complexidade de tempo O(V + E) para a BFS.

3.2 Matriz de adjacência

Uma matriz A ∈ {0, 1}|V|×|V|:

A[u, v] = { 1 se (u, v) ∈ E; 0 caso contrário }

Essa representação leva a complexidade O(V2) para o percurso.

Para grafos esparsos (comuns em sistemas de engenharia), listas de adjacência são superiores.

4. O problema que a BFS resolve

Seja s ∈ V um vértice de origem (fonte) distinguido.

Queremos calcular:

4.1 Atingibilidade

Quais vértices são alcançáveis a partir de s?

Reach(s) = { v ∈ V ∣ ∃ caminho de s até v }
4.2 Distância de caminho mínimo (grafos não ponderados)

Defina δ(s, v) como o número mínimo de arestas em qualquer caminho de s até v. Isso é chamado de distância no grafo.

A BFS computa d[v] = δ(s, v) para todos os vértices alcançáveis.

Importante: a BFS não minimiza pesos. Ela minimiza o número de arestas. Por isso, ela funciona apenas para grafos não ponderados.

5. Caminhos — definição formal

Um caminho de comprimento k é uma sequência v0, v1, …, vk tal que (vi−1, vi) ∈ E para todo i = 1, …, k.

O comprimento do caminho é k.

Problema de caminho mínimo: min k, sujeito à existência de tal sequência.

6. Estrutura em camadas — uma prévia da geometria da BFS

Embora ainda não tenhamos definido o algoritmo, introduzimos uma ideia estrutural.

Defina as camadas por distância:

Li = { v ∈ V ∣ δ(s, v) = i }
  • L0 = {s}
  • L1 = vizinhos de s
  • L2 = vértices a distância 2
  • etc.

Essas camadas particionam o subgrafo alcançável. A BFS explorará os vértices exatamente nessa ordem por camadas.

Essa estrutura em camadas é o coração geométrico do algoritmo.

7. Objetivo da BFS (enunciado preciso)

Dado um grafo G = (V, E) e uma origem s ∈ V, compute:

  • A função distância d : V → N ∪ {∞}
  • Uma função predecessor π : V → V ∪ {NIL}

tal que:

  • d[v] = δ(s, v)
  • Os ponteiros de predecessor formam uma árvore de caminhos mínimos enraizada em s

8. Por que isso importa em engenharia

A BFS aparece em:

  • Roteamento em redes (saltos não ponderados)
  • Distância em redes sociais
  • Rastreamento/crawling na web
  • Resolução de dependências
  • Análise de conectividade
  • Teste de bipartição

Em termos de matemática discreta: a BFS constrói a estrutura métrica induzida pela distância por número de arestas.

Isso não é apenas um percurso. É a construção de um espaço métrico de caminhos mínimos sobre G.

Próxima: Parte 2 — A Ideia Central (Camadas + Fila)

Agora que introduzimos o problema e sua motivação, avançamos para a intuição central. Na Parte 2, explicamos como o BFS explora o grafo camada por camada e por que a estrutura de fila (FIFO) é a chave para esse comportamento.