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::
- Iniciar no nó raiz e empurrá-lo para a pilha.
- verifique se existem nós adjacentes da árvore e selecione um nó.
- atravessa todo o ramo do nó seleccionado e empurra todos os nós para a pilha.
- 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.
- 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:
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.