Algoritmo A* (Lê-se: A-estrela) é um algoritmo para Busca de Caminho. Ele busca o caminho em um grafo de um vértice inicial até um vértice final. Ele é a combinação de aproximações heurísticas como do algoritmo Breadth First Search (Busca em Largura) e da formalidade do Algoritmo de Dijkstra.
O algoritmo foi descrito pela primeira vez em 1968 por Peter Hart, Nils Nilsson, e Bertram Raphael. Na publicação deles, ele foi chamado de algoritmo A; usando este algoritmo com uma heurística apropriada atinge-se um comportamento ótimo, e passou a ser conhecido por A*.
Sua aplicação vai desde aplicativos para encontrar rotas de deslocamento entre localidades a resolução de problemas, como a resolução de um quebra-cabeças. Ele é muito usado em jogos.
Algoritmo
Sejam
Q = conjunto de nós a serem pesquisados; S = o estado inicial da busca
Faça:
- Inicialize Q com o nó de busca (S) como única entrada;
- Se Q está vazio, interrompa. Se não, escolha o melhor elemento de Q;
- Se o estado (n) é um objetivo, retorne n;
- (De outro modo) Remova n de Q;
- Encontre os descendentes do estado (n) que não estão em visitados e crie todas as extensões de n para cada descendente;
- Adicione os caminhos estendidos a Q e vá ao passo 2;
caminhos expandidos;
Uma estimativa que sempre subestima o comprimento real do caminho ate o objetivo é chamada de admissível. O uso de uma estimativa admissível garante que a busca de custo-uniforme ainda encontrará o menor caminho.
Ligações externas
- (em português) A* Pathfinding para Iniciantes
- (em português) Projeto de Pesquisa de Algoritmos de Busca
- (em inglês) Amit's A* Pages -- Path finding Texto bastante completo sobre busca de caminhos (Path finding) usando o Algoritmo A*