SingularCode

Tipos de Algoritmo de Busca

Tipos de Algoritmos de Busca

Busca sem Informação

Busca em Largura (Breadth-First Search – BFS):

  • Esta busca explora os vizinhos de todos os nós em um determinado nível antes de mover-se para os nós no próximo nível.
  • É garantido encontrar a solução ótima se houver uma, mas pode ser custoso em termos de memória, pois mantém todos os nós de fronteira na memória.

Busca em Profundidade (Depth-First Search – DFS):

  • Explora tão profundamente quanto possível ao longo de cada ramo antes de retroceder.
  • Pode ser mais eficiente em memória do que a BFS, mas não é garantido encontrar a solução ótima e pode ficar preso em loops se não for cuidadosamente implementado.

Busca em Largura

Como Funciona:

A busca em largura começa em Arad e explora todos os vizinhos diretos (cidades conectadas diretamente a Arad) antes de se mover para os vizinhos dos vizinhos. Isso continua até que Bucareste seja encontrado ou todos os possíveis caminhos sejam explorados.

Vantagens:

Solução Ótima: Se o custo de cada passo é o mesmo, a BFS garantirá a solução ótima, ou seja, o caminho com o menor número de etapas de Arad a Bucareste.

Completo: A BFS sempre encontrará uma solução se ela existir, independentemente da estrutura do grafo.

Desvantagens:

Espaço de Memória: A BFS armazena todos os nós de fronteira na memória, o que pode ser muito custoso em termos de memória, especialmente em grafos grandes ou em buscas profundas.

Ineficiente para Grandes Profundidades: Em grafos onde o caminho solução está a uma grande profundidade, a BFS pode ser lenta, pois explora muitos nós desnecessários.

Aplicação no Mapa da Romênia:

Usando a BFS, você exploraria sistematicamente todas as cidades alcançáveis a partir de Arad, expandindo em camadas até chegar a Bucareste. Isso garantiria que, se o caminho mais curto (em termos de número de cidades percorridas) fosse o que você está procurando, a BFS o encontraria.

Busca em Profundidade

Como Funciona:

A busca em profundidade começa em Arad e explora tão profundamente quanto possível ao longo de cada ramo antes de retroceder. Isso significa escolher um caminho e seguir por ele até que não haja mais para onde ir, então volta e tenta um caminho diferente.

Vantagens:

Menor Uso de Memória: A DFS usa menos memória do que a BFS, pois só precisa armazenar uma cadeia de nós de um caminho de cada vez, mais os nós irmãos dos nós armazenados.

Encontra Soluções em Profundidades: Pode encontrar rapidamente uma solução se ela estiver localizada a uma grande profundidade no grafo.

Desvantagens:

Não Garante a Solução Ótima: A DFS pode encontrar uma solução, mas não há garantia de que será a solução ótima, especialmente se os custos dos passos variarem.

Não Completo: Em grafos infinitos ou muito grandes, a DFS pode ficar presa explorando um ramo profundo sem solução, especialmente se não houver mecanismos para evitar a revisitação de nós.

Aplicação no Mapa da Romênia:

Com a DFS, você poderia seguir um caminho de Arad até que ele não pudesse mais ser seguido antes de tentar uma alternativa. Isso poderia levar você rapidamente a Bucareste se tiver sorte com a escolha do caminho, mas também poderia resultar em muita exploração desnecessária.

Busca com Informação ou Busca Heurística

Uma busca heurística (busca com informação) é uma estratégia de busca em espaços de problemas que utiliza uma heurística, isto é, uma forma de estimativa que guia o processo de busca para encontrar uma solução de forma mais eficiente do que métodos de busca exaustiva, como a busca em largura ou a busca em profundidade sem qualquer orientação. A ideia central por trás da busca heurística é usar conhecimento específico do problema para fazer escolhas inteligentes sobre qual caminho seguir, reduzindo assim o número de passos necessários para chegar a uma solução.

A busca gulosa e a busca A* são dois algoritmos de busca que utilizam heurísticas para tentar otimizar o processo de encontrar um caminho em um grafo, por exemplo, de Arad a Bucareste, como no seu exemplo anterior. Ambos os algoritmos tentam melhorar a eficiência da busca ao estimar o melhor caminho a seguir, mas eles fazem isso de maneiras ligeiramente diferentes e, consequentemente, têm suas próprias vantagens e desvantagens.

Busca Gulosa (Greedy Search):

  • Escolhe sempre o caminho que parece mais promissor em um determinado momento, usando uma heurística para estimar a melhor opção.
  • Não é garantido encontrar a solução ótima, pois pode ficar preso em ótimos locais.

Busca A*:

  • Combina as vantagens da busca gulosa (usando heurísticas para escolher o caminho) com a garantia de encontrar o caminho ótimo, mantendo um controle sobre o custo total do caminho desde o início.
  • Usa uma função de avaliação f(n) = g(n) + h(n), onde g(n) é o custo do caminho desde o nó inicial até n, e h(n) é uma estimativa heurística do custo mais barato de n até o objetivo.

Busca Gulosa

Como Funciona: A busca gulosa sempre escolhe o caminho que parece ser o melhor naquele momento, baseando-se exclusivamente na heurística que estima a distância do nó atual até o objetivo. Ela não leva em conta o custo já percorrido do ponto de partida ao nó atual.

Vantagens:

  • Simplicidade: É relativamente simples de implementar.
  • Velocidade: Pode encontrar rapidamente um caminho até o objetivo, pois sempre segue a direção que parece ser a mais promissora.

Desvantagens:

  • Não é Ótima: Não garante a solução mais eficiente ou o caminho mais curto, porque pode ficar “presa” em caminhos que parecem bons a princípio, mas que levam a impasses ou rotas indiretamente longas.
  • Pode Falhar em Encontrar Qualquer Solução: Dependendo da heurística e do grafo, pode não encontrar um caminho, mesmo que exista um.

Busca Gulosa A*

Como Funciona: A busca A* combina as distâncias já percorridas do ponto de partida até o nó atual (custo g) com uma heurística que estima a distância do nó atual até o objetivo (custo h), formando um custo total estimado (f = g + h) para cada caminho. A* sempre expande o caminho com o menor custo f.

Vantagens:

  • Ótima: Garante encontrar o caminho mais curto se a heurística usada for admissível (nunca superestima o custo real de chegar ao objetivo) e consistente (o custo estimado de chegar ao objetivo a partir de um nó é sempre menor ou igual ao custo estimado de qualquer vizinho desse nó mais o custo de chegar a esse vizinho).
  • Eficiente: É mais eficiente do que algoritmos de busca que não utilizam heurísticas, pois minimiza o número de nós explorados ao focar na direção mais promissora.

Desvantagens:

  • Complexidade: Pode ser mais complexo de implementar corretamente, especialmente a parte da heurística.
  • Requisitos de Memória: Pode exigir mais memória do que outros algoritmos de busca, pois precisa armazenar todos os caminhos explorados e a serem explorados.

Atualizado em: 20/04/2024 por Nelson H. Koshoji