Algoritmo de pesquisa de profundidade com Python

caros leitores, neste artigo vou guiá-los através do conceito de profundidade primeira pesquisa (DFS). Este é um conceito gráfico que é um problema comum em muitos exames de codificação competitivos. Então, vamos olhar para a criação de um DFS traversal usando Python.

Índice

o que é Profundidade primeira pesquisa?

the depth-first search is an algorithm that makes use of the Stack data structure to traverse graphs and trees. O conceito de profundidade-primeira busca vem da palavra “profundidade”. A árvore atravessa até a profundidade de um ramo e, em seguida, atravessa de volta para o resto dos nós.

considere uma “pilha” vazia que contém os nós visitados para cada iteração. A nossa tarefa aqui é a seguinte::

  1. Iniciar no nó raiz e empurrá-lo para a pilha.
  2. verifique se existem nós adjacentes da árvore e selecione um nó.
  3. atravessa todo o ramo do nó seleccionado e empurra todos os nós para a pilha.
  4. ao chegar ao fim de um ramo (não mais nós adjacentes) ou seja, nó de folha nth, mover para trás por um único passo e procurar pelos nós adjacentes do nó n-1.
  5. se existirem nós adjacentes para o nó n-1, atravesse esses ramos e empurre nós para a pilha.

Conceito de Profundidade Primeira Pesquisa Ilustrado

Vamos olhar para o nosso exemplo de gráfico abaixo:

Imagem 8
Exemplo de Gráfico de

Um é o nó raiz. Então, desde que A é visitada, empurramos isto para a pilha.

Stack : A

vamos para o ramo a-B. B não é visitado, então vamos para B e empurramos B para a pilha.

Stack : A B

agora, chegamos ao fim do nosso ramo A-B e nos movemos para o nó n-1 que é A. Agora vamos olhar para o nó adjacente de A Que É S. Visit s e empurrá-lo para a pilha. Agora você tem que atravessar o ramo S-C-D, até a profundidade I upto D E mark S, C, D como visitado.

Stack: A B S C D

uma vez que D não tem outros nós adjacentes, mover de volta para C e atravessar o seu ramo adjacente E-H-G para a profundidade e empurrá-los para a pilha.

Stack : A B S C D E H G

ao chegar a D, há apenas um nó adjacente ie F que não é visitado. Empurre F para a pilha também.

Stack : A B S C D E H G F

esta pilha em si é a traversal do DFS.

Profundidade de Codificação Algoritmo de Pesquisa em Python

Como você deve saber, existem muitos métodos de representação de um gráfico que é a lista de adjacência e matriz de adjacências.

assim, no exemplo seguinte, eu defini uma lista de adjacência para cada um dos nós em nosso grafo.

graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }

Nota: Esta lista de adjacência pode ser introduzida a partir do utilizador e não precisa de ser codificada em código rígido.

Now, we will definite our DFS function which takes in 3 parameters as input-the graph (adjacency list), a node, and a list of visited nods.

se o nó actual não for visitado, ou seja, não estiver presente na lista visitada, marque-o como visitado e adicione-o à lista visitada.

mover para o nó seguinte e, em seguida, passar recursivamente este nó para a função DFS. Desta forma, cada nó se move até a profundidade e imprime-lo como a saída DFS.

def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)

Código Completo e de Saída

graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)

A saída do código acima é da seguinte maneira:


Conclusão

eu espero que você tenha seguido este tutorial sobre o algoritmo DFS e ter sido capaz de compreender o código e a exemplo também. Experimente usando caneta e papel ao seu lado para entender melhor os traversals.

Deixe uma resposta

O seu endereço de email não será publicado.

More: