Um galho na árvore é chamado de vantagem. Este artigo tem como objetivo ilustrar o que é conhecido como complexidade do tempo para a primeira pesquisa de profundidade. O DFS é explicado brevemente. C ++ é usado para ilustração de código.
Travessal de pré-encomenda para busca de profundidade primeiro
O algoritmo é o seguinte:
1) Visite o vértice atual.
2) Travesse a sub-árvore esquerda do vértice atual de maneira recursiva.
3) Travesse a sub-árvore direita do vértice atual de maneira recursiva.
Para a árvore anterior, o primeiro vértice a ser visitado é um. Este é o vértice atual. Atravessando recursivamente a sub-árvore esquerda e, em seguida, a sub-árvore direita significa visita B enquanto a visita de C é registrada na memória para ser visitada posteriormente.
Em B, B é o vértice atual. Atravessando recursivamente a sub-árvore esquerda e, em seguida, a sub-árvore direita significa visitar e enquanto a visita de f é registrada na memória para ser visitada posteriormente.
Em e, e é o vértice atual. E não tem sub-árvore esquerda ou direita (sem bordas). A última gravação em memória para visitar foi a sub-árvore certa (Edge) para B. O sub-árvore direito para B consiste em F precedido por sua borda. Neste ponto, F é visitado.
A gravação anterior em memória para visitar agora é a sub-árvore certa (Edge) para um. O sub-árvore direito para um gravado consiste em C, seguido de suas bordas e crianças. Neste ponto, C é visitado. C tem três arestas. De acordo com o algoritmo, a borda esquerda é acessada primeiro.
Quando a borda esquerda é acessada, G é visitado. Não há filho para G. Pelo algoritmo, H compartilha o mesmo pai com g e, como está à direita de G, é visitado a seguir.
"Eu" está à direita de H e compartilha o mesmo pai com H. Pelo algoritmo, qualquer nó à direita de outro nó deve ser visitado depois que o nó foi visitado. Não importa se o nó acabou de visitar está à direita de outro nó. Então "eu" é visitado a seguir.
Não há nó à direita de "eu". C e todos os seus descendentes foram visitados. No entanto, observe que há um nó à direita de C. Este nó é D. Pelo algoritmo, qualquer nó à direita de outro nó deve ser visitado após o nó (visitado). Não importa se o nó visitado estava à direita de algum outro nó. Então D é visitado a seguir.
D tem dois filhos, J e K. J está à esquerda de k. J é visitado primeiro antes de k.
O algoritmo de pesquisa em profundidade pode ser resumido da seguinte. Do vértice mais baixo da esquerda, visite os irmãos certos daquele vértice e depois suba a árvore, para a direita e descendo de tempos em tempos adequadamente.
Com isso, a sequência do DFS da árvore anterior é: a, b, e, f, c, g, h, i, d, j, k.
Complexidade do tempo
A árvore anterior tem 11 vértices e 10 arestas. Se a árvore estiver bem armazenada, a varredura de toda a árvore envolverá 11 vértices e 10 arestas. Esta é uma apreciação da velocidade de operação da pesquisa em profundidade. É complexidade do tempo. Está escrito como:
O (| v |+| e |)
Onde | v | é o número de vértices (nós) e | e | é o número de bordas. Para esta árvore, o total é 21 = 11 + 10. O "O" tem que estar lá.
Estrutura para a árvore
A organização das árvores pode ser descrita da seguinte forma:
Vértice A: Filhos: B, C, D
Vertex B: Filhos: E, F
Vértice c: filhos: g, h, eu
Vertex D: Filhos: J, K
Vértice e
Vértice f
Vértice g
Vértice h
Vértice i
Vértice j
Vértice k
A árvore anterior será armazenada em um não -ordenado de vetores. Um vértice é uma chave, e as crianças são os valores do vetor da chave. Vértices de E para K não têm filhos.
Codificação C ++
O programa pode começar com o seguinte título:
#incluir
#incluir
#incluir
usando namespace std;
C ++ codificando para os não-ordenados
O UNODERED_MAP-OF-VECTORS é criado com o seguinte código:
UNODERED_MAP> umv = 'a', 'b', 'c', 'd',
'B', 'e', 'f',
'C', 'g', 'h', 'i',
'D', 'j', 'k',
'E', ,
'F', ,
'G', ,
'H', ,
'EU', ,
'J', ,
'K', ;
Isso pode ser colocado logo abaixo do título anterior.
A função de profundidade primeiro
É uma função recursiva que imprime cada vértice (nó) visitado. Isso é:
Void DepthfirstSearch (Char Parent)
cout << parent << "; //print vertex
para (int i = 0; idepthfirstSearch (umv [pai] [i]);
Depois de imprimir o vértice esquerdo, o loop for imprimido os vértices direito. O loop for o recall.
Função principal C ++
Uma função principal adequada para o programa é:
int main (int argc, char ** argv)
depthfirstSearch ('a');
cout << endl;
retornar 0;
O algoritmo para pesquisa de profundidade é o seguinte:
1) Visite o vértice atual.
2) Travesse a sub-árvore esquerda do vértice atual de maneira recursiva.
3) Travesse a sub-árvore direita do vértice atual de maneira recursiva.
Isso pode ser interpretado da seguinte. Do vértice mais baixo da esquerda, visite os irmãos certos daquele vértice e suba a árvore recursivamente, para a direita, descendo de tempos em tempos, adequadamente.
A complexidade do tempo para o algoritmo de pesquisa de profundidade é:
O (| v |+| e |)
Conclusão
DFS significa pesquisa em profundidade. Refere -se a como os nós de uma árvore são visitados até que o nó desejado esteja localizado. Por simplicidade, todos os nós da árvore deste artigo foram visitados. A idéia é visitar todos os nós, com cada nó visitado uma vez. Um nó também é chamado de vértice. Primeira pesquisa em profundidade pode estar em um dos três pedidos: pré-encomenda, em ordem ou pós-ordem. Neste artigo, a travessal de pré-encomenda foi usada.