BFS vs DFS – Diferença entre eles

Diferença chave entre BFS e DFS

  • O BFS encontra o caminho mais curto para o destino, enquanto o DFS vai para a parte inferior de uma subárvore e depois volta.
  • A forma completa do BFS é a pesquisa em largura, enquanto a forma completa do DFS é a pesquisa em profundidade.
  • O BFS usa uma fila para acompanhar o próximo local a ser visitado. enquanto o DFS usa uma pilha para rastrear o próximo local a ser visitado.
  • O BFS percorre de acordo com o nível da árvore, enquanto o DFS percorre de acordo com a profundidade da árvore.
  • O BFS é implementado usando uma lista FIFO; por outro lado, o DFS é implementado usando uma lista LIFO.
  • No BFS, você nunca pode ficar preso em loops finitos, enquanto no DFS, você pode ficar preso em loops infinitos.
Diferença entre BFS e DFS
Diferença entre BFS e DFS

O que é BFS?

BFS é um algoritmo usado para representar graficamente dados ou pesquisar árvores ou atravessar estruturas. O algoritmo visita e marca com eficiência todos os nós principais em um gráfico de maneira ampla e precisa.

Este algoritmo seleciona um único nó (ponto inicial ou de origem) em um grafo e então visita todos os nós adjacentes ao nó selecionado. Depois que o algoritmo visita e marca o nó inicial, ele se move em direção aos nós não visitados mais próximos e os analisa.

Uma vez visitados, todos os nós são marcados. Essas iterações continuam até que todos os nós do gráfico tenham sido visitados e marcados com sucesso. A forma completa do BFS é a pesquisa em largura.

O que é DFS?

DFS é um algoritmo para encontrar ou percorrer gráficos ou árvores na direção da profundidade. A execução do algoritmo começa no nó raiz e explora cada ramo antes de retroceder. Ele usa uma estrutura de dados de pilha para lembrar, obter o vértice subsequente e iniciar uma pesquisa sempre que um beco sem saída aparecer em qualquer iteração. A forma completa do DFS é a pesquisa em profundidade.

Diferença entre árvore binária BFS e DFS

Aqui estão as diferenças importantes entre BFS e DFS.

BFS DFS
BFS encontra o caminho mais curto para o destino. O DFS vai para a parte inferior de uma subárvore e depois volta.
A forma completa do BFS é a pesquisa em amplitude. A forma completa de DFS é Depth First Search.
Ele usa uma fila para acompanhar o próximo local a ser visitado. Ele usa uma pilha para controlar o próximo local a ser visitado.
O BFS percorre de acordo com o nível da árvore. O DFS percorre de acordo com a profundidade da árvore.
É implementado usando a lista FIFO. É implementado usando a lista LIFO.
Requer mais memória em comparação com o DFS. Requer menos memória em comparação com o BFS.
Este algoritmo fornece a solução do caminho mais raso. Este algoritmo não garante a solução do caminho mais superficial.
Não há necessidade de retrocesso no BFS. Há uma necessidade de retrocesso no DFS.
Você nunca pode ficar preso em loops finitos. Você pode ficar preso em loops infinitos.
Se você não encontrar nenhum objetivo, poderá ser necessário expandir muitos nós antes que a solução seja encontrada. Se você não encontrar nenhum objetivo, poderá ocorrer o retrocesso do nó folha.

Exemplo de BFS

No exemplo de BFS a seguir, usamos um gráfico com 6 vértices.

Exemplo de BFS

Passo 1)

Exemplo de BFS

Você tem um gráfico de sete números variando de 0 a 6.

Passo 2)

Exemplo de BFS

0 ou zero foi marcado como um nó raiz.

Passo 3)

Exemplo de BFS

0 é visitado, marcado e inserido na estrutura de dados da fila.

Passo 4)

Exemplo de BFS

Os 0 nós adjacentes e não visitados restantes são visitados, marcados e inseridos na fila.

Passo 5)

Exemplo de BFS

As iterações de passagem são repetidas até que todos os nós sejam visitados.

Exemplo de DFS

No exemplo de DFS a seguir, usamos um gráfico não direcionado com 5 vértices.

Exemplo de DFS

Passo 1)

Exemplo de DFS

Começamos do vértice 0. O algoritmo começa colocando-o na lista visitada e simultaneamente colocando todos os seus vértices adjacentes na estrutura de dados chamada pilha.

Passo 2)

Exemplo de DFS

Você visitará o elemento que está no topo da pilha, por exemplo, 1 e irá para seus nós adjacentes. É porque 0 já foi visitado. Portanto, visitamos o vértice 2.

Passo 3)

Exemplo de DFS

O vértice 2 tem um vértice próximo não visitado em 4. Portanto, adicionamos isso na pilha e o visitamos.

Passo 4)

Exemplo de DFS

Por fim, visitaremos o último vértice 3, ele não possui nenhum nó adjacente não visitado. Concluímos a travessia do gráfico usando o algoritmo DFS.

Exemplo de DFS

Aplicações de BFS

Aqui estão as aplicações do BFS:

Gráficos não ponderados

O algoritmo BFS pode facilmente criar o caminho mais curto e uma árvore geradora mínima para visitar todos os vértices do gráfico no menor tempo possível com alta precisão.

Redes P2P

O BFS pode ser implementado para localizar todos os nós mais próximos ou vizinhos em uma rede ponto a ponto. Isso encontrará os dados necessários mais rapidamente.

Rastreadores da Web

Mecanismos de busca ou rastreadores da web podem criar facilmente vários níveis de índices empregando BFS. A implementação do BFS começa na fonte, que é a página da web, e então visita todos os links dessa fonte.

Transmissão em rede

Um pacote transmitido é guiado pelo algoritmo BFS para encontrar e alcançar todos os nós para os quais possui o endereço.

Aplicações de DFS

Aqui estão aplicações importantes do DFS:

Gráfico ponderado

Em um gráfico ponderado, a travessia do gráfico DFS gera a árvore de caminho mais curto e a árvore geradora mínima.

Detectando um ciclo em um gráfico

Um gráfico tem um ciclo se encontrarmos uma aresta posterior durante o DFS. Portanto, devemos executar o DFS para o gráfico e verificar as arestas posteriores.

Encontrando o caminho

Podemos nos especializar no algoritmo DFS para pesquisar um caminho entre dois vértices.

Classificação Topológica

É usado principalmente para agendar trabalhos a partir de determinadas dependências entre o grupo de trabalhos. Na ciência da computação, é utilizado no escalonamento de instruções, serialização de dados, síntese lógica, determinação da ordem das tarefas de compilação.

Pesquisando componentes fortemente conectados de um gráfico

É usado no gráfico DFS quando há um caminho de cada vértice no gráfico para outros vértices restantes.

Resolvendo quebra-cabeças com apenas uma solução

O algoritmo DFS pode ser facilmente adaptado para pesquisar todas as soluções de um labirinto, incluindo nós no caminho existente no conjunto visitado.