Warum wird angenommen, dass die DFS

11

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.Ö(bm)bm

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Ö(|V.|)O()

Dies ähnelt eher der Raumkomplexität von DFS, dh , wobei m die maximale Länge ist, die der Algorithmus erreicht.O(m)m

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.b

Darüber hinaus ist gemäß diesem Artikel über IDA * von Richard Korf die Raumkomplexität von DFS , wobei d als "Tiefengrenzwert" betrachtet wird.O(d)d

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.

nbro
quelle
DFS is considered to […] of the treeNicht jeder Graph, der zuerst die Tiefe durchquert, ist ein Baum .
Graubart
Es gibt einen Unterschied zwischen der Aussage "Dies hier hat die DFS-Implementierung X gekostet" und "DFS kann so implementiert werden, dass es X kostet". Es scheint also über verschiedene Aussagen der zweiten Art zu streiten, die überhaupt nicht widersprüchlich sein müssen. (Beachten Sie, dass es seit überhaupt keinen Widerspruch gibt , wenn O ( b m ) überhaupt etwas bedeuten soll.)O(bm)O(m)O(bm)
Raphael
@greybeard Können Sie mir ein Beispiel nennen, bei dem eine Tiefenüberquerung in einem Diagramm nicht zu einem Baum führen würde?
nbro
example where a depth-first traversal on a graph would not result in a treeohne zu viel darüber nachzudenken: analysieren. (Warten Sie: Was meinen Sie : result in a tree? Die Frage ist über das Suchen / Durchlaufen eines Diagramms.)
Graubart
1
@ Greybeard Nach allen Definitionen, die ich bisher gefunden habe. Suchen Sie mir eine Definition, in der die Knoten erneut aufgerufen werden, und wir können darüber diskutieren.
nbro

Antworten:

7

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:bm[b]m

  1. Beginnen Sie an der Wurzel. Schieben Sie auf den Stapel (in umgekehrter Reihenfolge).1,2,,b

  2. Pop und schieben Sie 11 , 12 , , 1 b auf den Stapel.111,12,,1b

  3. Pop und schieben Sie 111 , 112 , , 11 b auf den Stapel.11111,112,,11b

  4. Pop und schieben Sie 1 m , 1 m - 1 2 , , 1 m - 1 b auf den Stapel.1m11m,1m12,,1m1b

Zu diesem Zeitpunkt enthält der Stapel

1m,1m12,,1m1b,,112,,11b,12,,1b,2,,b,

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.(b1)m+1

Yuval Filmus
quelle
2
Ein halbes Liter hält den Arzt fern.
Graubart
3

Hier sind zwei Punkte zu beachten:

  1. O(bd)bddbbO(d)

  2. O(d) Sie in der Reihenfolge der Tiefe zuerst fortgefahren sind - tatsächlich benötigen Sie zu diesem Zeitpunkt nicht alle anderen Nachkommendb

O(bd)O(d) .

Hoffe das hilft,

Carlos Linares López
quelle