CCT-UFCA/Ciência da Computação/Inteligência Artificial/Busca bidirecional
Aparência
Busca Bidirecional - Definição
[editar | editar código]A busca bidirecional é uma estratégia de busca cega que executa duas buscas ao mesmo tempo:
- Busca direta – a partir do estado inicial em direção ao objetivo.
- Busca inversa – a partir do objetivo em direção ao estado inicial.
O processo termina quando as duas buscas se encontram em um ponto intermediário no espaço de estados.
Motivação
[editar | editar código]O grande ganho vem do fato de que:
- Se a profundidade da solução é d, uma busca simples em largura custaria O(b^d).
- Na busca bidirecional, cada busca percorre apenas até d/2, custando:
- O(b^(d/2))+O(b^(d/2))≈O(b^(d/2))
- Esse ganho é enorme quando b e d são grandes.
Como funciona
[editar | editar código]- Início: Coloca o estado inicial na fronteira da busca direta e o estado objetivo na fronteira da busca inversa.
- Alternância: Executa uma expansão em cada lado (direta e inversa) ou alterna entre elas.
- Encontro: A busca termina quando:
- Um nó gerado pela busca direta já está na fronteira da busca inversa, ou
- Um nó gerado pela busca inversa já foi encontrado na busca direta.
- Reconstrução do caminho: Junta o caminho da busca direta com o da busca inversa.
Exemplo – Grafo de Cidades
[editar | editar código]Suponha o problema de ir de Arad até Bucareste, com profundidade mínima d=6 e fator de ramificação b=10.
- Busca em largura normal:
- b^d=106=1.000.000 nós gerados
- Busca bidirecional:
- Cada busca percorre até d/2=3:
- 2×b^(d/2)=2×103=2.000 noˊs gerados
- Cada busca percorre até d/2=3:
- Resultado: 500× menos nós gerados!
Desafios e Limitações
[editar | editar código]- Busca inversa difícil – Nem sempre é simples gerar predecessores do objetivo.
- Vários objetivos – Fica complexo definir a busca inversa se houver mais de um objetivo.
- Objetivos abstratos – Em problemas como as 8 rainhas, não existe um único estado objetivo claro, tornando inviável a busca reversa.
- Memória – Apesar de menor que BFS, ainda pode ser grande se b^(d/2) for alto.
Referências
[editar | editar código]- RUSSELL, S. J.; NORVIG, P. Inteligência artificial. 3 ed. LTC, 2013. 1016 p.
- COPPIN, B. Inteligência Artificial. 1a ed. LTC, 2010. 664 p.