LogRitmo navegador / ativofase / 02LR / fase 02 · ativa
phase 02 / graphs
04 / grafos

A* Search.

Combine custo percorrido e estimativa até o destino.

ver Dijkstra
visualização passo a passo

Combina distância percorrida com uma heurística até o alvo.

palco / A*fronteira / caminho
grafo / 08 nós / 11 arestasvisitas 0fronteira 1relaxamentos 0
42231423241AorigemBBCCDDEEFFGGHdestino
atual visitado caminho origem A → destino H
telemetria / grafo
passo00grafo carregado — origem pronta
nós visitados00estado fechado
fronteira01próximos candidatos
custo alvo—ainda calculando
playback observado · grafo

Duração que aconteceu.

Execuções concluídas nesta bancada, medidas durante o playback ativo no navegador e salvas apenas neste dispositivo.

média / últimas 0—A* · armazenamento local
sem registros ainda

Execute o algoritmo até o fim para transformar esta bancada em uma série de medições reais.

/ leitura da fronteira

A* Search
prioriza a promessa.

A* Search utiliza relaxamento e uma heurística para priorizar caminhos promissores. Nesta bancada, a estimativa usa a geometria do grafo calibrada pelos pesos para não superestimar o custo restante.

✦

estime o próximo passo
A rota combina distância percorrida e uma heurística admissível, que não pode superestimar o custo restante.

complexidade
melhorO(E)
médioO(E log V)
piorO(E log V)

O(E) é um cenário favorável. Nesta bancada, a heurística é calibrada pelos pesos para não superestimar o custo restante, e a fila linear prioriza a compreensão em vez do benchmark.

Como ler esta réguaEla não mede o tempo do seu aparelho: compara como o trabalho tende a crescer quando a rede aumenta em V (nós) e E (ligações).
operações
vértices (V) e arestas (E)O(V + E)O(V²)O(E log V)O(E)
O(E log V) · Arestas com prioridade

O algoritmo examina arestas (E) e usa uma fila de prioridade para escolher o próximo vértice. O log V representa os níveis necessários para reorganizar essas escolhas.

Quando V dobra, cada ajuste da fila acrescenta apenas um nível; o trabalho principal ainda acompanha as arestas examinadas.
comparação / duas técnicas

Compare o crescimento lado a lado

Escolha duas técnicas diferentes. As curvas usam a mesma escala visual para explicar como o custo tende a aumentar.

Comparações prontasaplique um par didático
vértices (V) e arestas (E)operações

Use este par para comparar a exploração de um grafo não ponderado com o custo adicional de priorizar caminhos de menor distância. Breadth-First Search tende a crescer mais devagar do que Dijkstra quando aumentam vértices (V) e arestas (E). Isso descreve tendência assintótica, não mede o tempo do seu aparelho.

/ leitura técnica da busca heurística

A estimativa orienta,
mas não pode inventar custo.

A* procura um caminho de menor custo priorizando f(n) = g(n) + h(n). O termo g registra o melhor custo já encontrado desde a origem; h estima o que ainda falta. A busca é guiada pela soma dos dois, não apenas pelo nó que parece mais perto do destino.

01 / ADMISSIBILIDADE

A heurística pode subestimar, nunca prometer menos do que custa.

Para ser admissível, h(n) precisa ser no máximo o custo real restante até a meta. Assim, uma rota ótima ainda mantém uma prioridade compatível com seu custo final e não é descartada por uma previsão otimista demais.

02 / CONSISTÊNCIA

O palpite deve respeitar cada passagem do grafo.

Em busca em grafo, a condição h(n) ≤ c(n, m) + h(m) para cada aresta faz a previsão obedecer ao custo da transição. Com isso, as prioridades não diminuem ao longo de um caminho e um estado fechado não precisa ser reaberto.

03 / FRONTEIRA

O objetivo certifica o caminho quando sai da prioridade mínima.

Com custos não negativos e heurística admissível e consistente, retirar o destino da min-heap é suficiente para encerrar: nenhum candidato ainda na fronteira pode revelar uma rota mais barata.

/ o que a fórmula realmente controla

f(n) escolhe; g(n) prova; h(n) dirige.

Uma implementação conserva uma min-heap, o melhor g por estado e predecessores para recuperar o caminho. É comum inserir uma nova entrada quando surge um custo melhor e ignorar, ao extrair, entradas antigas. A qualidade de h pode reduzir expansões, mas não elimina o custo de memória da fronteira e dos registros.

PRIORIDADEg + hCusto acumulado mais estimativa.
LIMITE ESPECIALh = 0A* se reduz a Dijkstra.
GARANTIAmenor custoCom hipóteses da heurística.
RECURSO CRÍTICOmemóriaFronteira e custos por estado.
A MESMA FAMÍLIA, CONTRATOS DIFERENTES

Escolha a informação que o problema realmente oferece.

Dijkstra é a referência quando não há uma estimativa útil; A* acrescenta uma heurística segura para um destino específico. Greedy Best-First Search usa apenas a previsão e pode encontrar uma rota cara. Se houver pesos negativos, essas três escolhas não resolvem o contrato: Bellman-Ford é a alternativa apropriada.

MODELOPRIORIDADEGARANTIA
Dijkstrag(n)ótima, sem heurística
A*g(n) + h(n)ótima sob as hipóteses
Greedyh(n)sem garantia geral
DECISÃO DE ENGENHARIA

Não chame qualquer aproximação de heurística segura.

Use A* quando houver um destino claro e uma estimativa barata que respeite o modelo de custo: distância Manhattan em uma grade ortogonal, por exemplo, quando cada movimento custa ao menos uma unidade. Weighted A* aumenta a influência de h e pode encontrar uma rota antes, mas abre mão da optimalidade estrita. Quando a memória for o gargalo, variantes como IDA* trocam espaço por repetição de trabalho.

/ por baixo do palco

Pseudocódigo e
implementação.

A mesma rede pode ser explorada com uma fila, uma pilha ou uma função de custo. Os trechos mostram o núcleo da decisão; funções de apoio, como recuperar a rota ou escolher o menor custo, aparecem com nomes descritivos para manter o foco da explicação.

01calcule custo + heurística
02escolha a menor pontuação f (custo + estimativa)
03relaxe vizinhos
04atualize o melhor caminho
05pare ao alcançar o alvo
/ implementação sincronizada
function aStar(graph, start, goal) { // Prioritize cost plus heuristic estimate  const open = [start];  const gScore = { [start]: 0 };  const closed = new Set();  while (open.length) {    const node = bestByFScore(open, gScore, goal);    if (closed.has(node)) continue;    closed.add(node);    if (node === goal) return reconstruct(node);    for (const edge of graph[node]) {      if (closed.has(edge.to)) continue;      const score = gScore[node] + edge.weight;      if (score < (gScore[edge.to] ?? Infinity)) {        gScore[edge.to] = score; if (!open.includes(edge.to)) open.push(edge.to);      }    }  }  return null;}