Gemäß diesen Anmerkungen wird angenommen , dass DFS eine -Raumkomplexität aufweist, wobei b der Verzweigungsfaktor des Baums und m die maximale Länge eines Pfades im Zustandsraum ist.
Das gleiche gilt für diese Wikibook-Seite zur uninformierten Suche .
In der "Infobox" des Wikipedia-Artikels über DFS wird nun Folgendes für die räumliche Komplexität des Algorithmus dargestellt:
, wenn der gesamte Graph ohne Wiederholung durchlaufen wird, O ( längste gesuchte Pfadlänge ) für implizite Graphen ohne Eliminierung doppelter Knoten
Dies ähnelt eher der Raumkomplexität von DFS, dh , wobei m die maximale Länge ist, die der Algorithmus erreicht.
Warum denke ich, dass dies der Fall ist?
Grundsätzlich müssen wir keine anderen Knoten als die Knoten des Pfads speichern, den wir gerade betrachten. Es macht also keinen Sinn, in der Analyse, die sowohl vom Wikibook als auch von den Notizen, auf die ich Sie verwiesen habe, bereitgestellt wird, mit multiplizieren zu.
Darüber hinaus ist gemäß diesem Artikel über IDA * von Richard Korf die Raumkomplexität von DFS , wobei d als "Tiefengrenzwert" betrachtet wird.
Was ist die richtige Speicherkomplexität von DFS?
Ich denke, es kann von der Implementierung abhängen, daher würde ich eine Erklärung der Raumkomplexität für die verschiedenen bekannten Implementierungen begrüßen.
DFS is considered to […] of the tree
Nicht jeder Graph, der zuerst die Tiefe durchquert, ist ein Baum .example where a depth-first traversal on a graph would not result in a tree
ohne zu viel darüber nachzudenken: analysieren. (Warten Sie: Was meinen Sie :result in a tree
? Die Frage ist über das Suchen / Durchlaufen eines Diagramms.)Antworten:
Es hängt davon ab, wie genau Sie DFS nennen. Betrachten Sie zum Beispiel den in Wikipedia beschriebenen Algorithmus DFS-iterativ und nehmen Sie an, dass Sie ihn in einem Baum ausführen, damit Sie nicht verfolgen müssen, welche Knoten Sie bereits besucht haben. Angenommen, Sie führen es auf einem vollständigen Baum der Tiefe m aus . Wir können Knoten in ihrem Baum mit Worten über identifizieren [ b ] der Länge höchstens m . Der Algorithmus funktioniert wie folgt:b m [b] m
Beginnen Sie an der Wurzel. Schieben Sie auf den Stapel (in umgekehrter Reihenfolge).1,2,…,b
Pop und schieben Sie 11 , 12 , … , 1 b auf den Stapel.1 11,12,…,1b
Pop und schieben Sie 111 , 112 , … , 11 b auf den Stapel.11 111,112,…,11b
Pop und schieben Sie 1 m , 1 m - 1 2 , … , 1 m - 1 b auf den Stapel.1m−1 1m,1m−12,…,1m−1b
Zu diesem Zeitpunkt enthält der Stapel
für insgesamt Knoten. Sie können überprüfen, ob dies das Pint in der Zeit ist, in der die Größe des Stapels maximiert wird.(b−1)m+1
quelle
Hier sind zwei Punkte zu beachten:
Hoffe das hilft,
quelle