De acordo com essas notas , o DFS é considerado como tendo complexidade de espaço , em que é o fator de ramificação da árvore em que é o comprimento máximo de qualquer caminho no espaço de estado.
O mesmo é dito nesta página do Wikibook na Pesquisa não informada .
Agora, a "caixa de informações" do artigo da Wikipedia sobre DFS apresenta o seguinte para a complexidade espacial do algoritmo:
, se o gráfico inteiro for percorrido sem repetição, comprimento do caminho mais longo pesquisado para gráficos implícitos sem eliminação de nós duplicados
que é mais parecido com o que eu pensava ser a complexidade espacial do DFS, ou seja, , onde é o comprimento máximo atingido pelo algoritmo.
Por que eu acho que esse é o caso?
Bem, basicamente não precisamos armazenar outros nós além dos nós do caminho que estamos vendo atualmente, então não há nenhum ponto de multiplicar por na análise fornecida pelo Wikibook e pelas notas que você me referiu. para.
Além disso, de acordo com este documento sobre a IDA * de Richard Korf , a complexidade espacial do DFS é , onde é considerado o "corte de profundidade".
Então, qual é a complexidade de espaço correta do DFS?
Eu acho que isso depende da implementação, então eu apreciaria uma explicação da complexidade do espaço para as diferentes implementações conhecidas.
DFS is considered to […] of the tree
nem todo gráfico percorrido primeiro a profundidade é uma árvore .example where a depth-first traversal on a graph would not result in a tree
sem pensar demais: analisar. (Wait: o que quer dizer:result in a tree
? A questão é de como pesquisar / atravessando um gráfico.)Respostas:
Depende do que exatamente você chama de DFS. Considere, por exemplo, o algoritmo DFS-iterativo descrito na Wikipedia e suponha que você o execute em uma árvore para não precisar acompanhar quais nós já visitou. Suponha que você executá-lo em um completo árvore -ary de profundidade m . Podemos identificar nós em sua árvore com palavras com mais de [ b ] de comprimento, no máximo m . O algoritmo opera da seguinte maneira:b m [b] m
Comece pela raiz. Pressione para a pilha (na ordem inversa).1,2,…,b
Estale e empurre 11 , 12 , … , 1 b para a pilha.1 11,12,…,1b
Estale e empurre 111 , 112 , … , 11 b para a pilha.11 111,112,…,11b
Estale e empurre 1 m , 1 m - 1 2 , … , 1 m - 1 b para a pilha.1m−1 1m,1m−12,…,1m−1b
Neste ponto, a pilha contém
para um total de nós. Você pode verificar se esse é o litro no tempo em que o tamanho da pilha é maximizado.(b−1)m+1
fonte
Há dois pontos aqui a serem destacados:
Caso você introduza na pilha todos os descendentes do nó atual, efetivamente, a complexidade do espaço é onde b é o fator de ramificação ed é o comprimento máximo. A resposta de Yuval Filmus refere-se a este caso, de fato. No entanto, observe que, em geral, d é muito muito maior que b . Além disso, em muitos domínios, como o quebra-cabeça deslizante, b é delimitado por uma constante (nesse caso específico, 4) e, portanto, podemos dizer com segurança que o DFS tem uma complexidade de espaço que é O ( d ) .O(bd) b d d b b O(d)
É certo que, no entanto, esse nem sempre é o caso. Por exemplo, no quebra-cabeça Panqueca, o fator de ramificação aumenta com o comprimento da solução ideal e ambos têm valores semelhantes. Ainda assim, a complexidade do espaço é . Para ver isso, basta ajustar o procedimento de expansão de qualquer nó: em vez de inserir todos os descendentes do nó atual (como sugerido por Yuval Filmus), insira-os em ordem. Você primeiro gera o primeiro descendente e imediatamente depois de prosseguir em uma ordem de profundidade - por uma questão de fato, você não precisa de todos os outros descendentes neste momentoO(d) . Caso você volte para este nó, seu descendente será removido da pilha. Em seguida, gere o segundo descendente e prossiga na ordem da profundidade primeiro. Caso você retorne a esse nó, gere o terceiro e assim por diante até que não haja mais descendentes. Procedendo dessa maneira, você terá apenas nós na pilha, independentemente do fator de ramificação, b .d b
Resumindo, eu nunca diria que o DFS tem uma complexidade de espaço que é e, em vez disso, afirmo que sua complexidade de espaço é O ( d ) .O(bd) O(d)
Espero que isto ajude,
fonte