Noções de Grafos #3

Birds

 

É de fundamental importância compreender o algoritmo de busca de profundidade e largura em grafos. Existem várias aplicações que fazem o uso de algoritmos de busca, podendo ser utilizadas em simulação computacional para encontrar a saída de um labirinto, ordenação topológica de um grafo, achar o menor caminho entre dois vértices. Essas são só algumas aplicações de incontáveis outras.

Imgur

 

Busca em profundidade

A busca em profundidade (depth first search) é um algoritmo que explora um grafo a partir de um vértice inicial, visitando o máximo possível de vértices vizinhos antes de realizar o backtracking (retrocesso). Em outras palavras, a busca começa em um vértice e se aprofunda em seus vizinhos, até que um dos dois casos ocorra: o objetivo da busca é encontrado ou um vértice sem vizinhos que possam ser visitados é alcançado.

A busca em profundidade usa o mecanismo de backtracking. Isso significa que o algoritmo retrocede pelo mesmo caminho percorrido até encontrar outro caminho alternativo, visando encontrar o objetivo da busca ou uma solução alternativa.

Em resumo, a busca em profundidade é um algoritmo de busca de grafos que começa em um vértice e explora seus vizinhos até que não haja mais vértices a serem explorados ou o objetivo seja encontrado usando do backtracking para encontrar caminhos alternativos.

Imgur

Abaixo consta o algoritmo de busca em profundidade:

 

Passos

1 2 3 4 5 6 7

 

Busca em largura

O algoritmo de busca em largura (breadth first search) é um método para explorar um grafo. Ele começa a partir de um vértice inicial e, em seguida, visita todos os seus vizinhos antes de explorar mais a fundo. Em outras palavras, a busca avança em uma largura constante, visitando todos os vértices a uma distância k antes de visitar os vértices a uma distância k+1. O processo continua até que todos os vértices tenham sido visitados ou até que o objetivo da busca seja alcançado.

O algoritmo de busca em largura faz o uso do conceito de fila.

Durante a busca, o algoritmo de busca em largura utiliza uma fila para gerenciar os vértices visitados. Ele marca cada vértice como “visitado” antes de visitar os vizinhos desse vértice. Em seguida, adiciona cada vizinho à fila. Ele visita os vizinhos na ordem em que eles foram adicionados à fila, garantindo que todos os vértices a uma distância k sejam visitados antes de visitar qualquer vértice a uma distância k+1.

A busca em largura é amplamente utilizada em problemas de grafos e, assim como na busca em profundidade, tem um custo de busca de O(|V|+|A|) no pior caso. Isso significa que o custo da busca é proporcional ao número de vértices e arestas do grafo.

Imgur

Abaixo consta a implementação do algoritmo de busca em largura:

 

Passos

1 2 3 4 5 6

 

Conclusão

Em suma, os algoritmos de busca em profundidade e busca em largura são fundamentais para a exploração de grafos e têm um papel significativo em diversas aplicações da computação, como simulação de labirintos, ordenação topológica de grafos e até mesmo em inteligência artificial. Com a compreensão adequada desses algoritmos, é possível analisar e solucionar problemas complexos em diversas áreas da computação.

 

Referências

DFS and BFS algorithms

Estrutura de Dados Descomplicada - Em Linguagem C , por André Backes


Obrigado pela leitura!