DFS -Zeitkomplexität

DFS -Zeitkomplexität
DFS steht für die Tiefe-First-Suche. Es bezieht sich darauf, wie Knoten eines Baumes besucht werden, bis sich der gewünschte Knoten befindet. Der Einfachheit halber werden alle Knoten in diesem Artikel besucht. Die Idee ist, alle Knoten zu sehen, wobei jeder Knoten einmal besucht wird. Ein Knoten wird auch als Scheitelpunkt bezeichnet. Tiefe-First-Suche kann in einer von drei Bestellungen vorliegen: Vorbestellung, Bestellung oder Nachbestellung. In diesem Artikel wird vorbestellter Traversal verwendet. In diesem Artikel wird der folgende Baum verwendet, um die Vorbestellung für die Tiefe-First-Suche zu veranschaulichen:


Ein Ast im Baum wird eine Kante genannt. Dieser Artikel zielt darauf ab, zu veranschaulichen, was als Zeitkomplexität für die Suche in der Tiefe zu sehen ist. DFS wird zum ersten Mal kurz erklärt. C ++ wird zur Code -Illustration verwendet.

Vorbestellungen für die Tiefe-First-Suche

Der Algorithmus lautet wie folgt:

1) Besuchen Sie den aktuellen Scheitelpunkt.
2) durch den linken Unterbaum des Stromscheitels rekursiv durchqueren.
3) durch den rechten Unterbaum des Stromscheitels rekursiv durchqueren.

Für den vorherigen Baum ist der erste zu besuchende Scheitelpunkt a. Dies ist der aktuelle Scheitelpunkt. Rekursiv durchqueren Sie den linken Unterbaum und dann den rechten Unterbaum, besuchen Sie B, während der Besuch von C im Speicher aufgezeichnet wird, um später zu besuchen.

Bei B ist B der aktuelle Scheitelpunkt. Rekursiv durch das linke Unterbaum und dann den rechten Unterbaum zu durchqueren, besuchen Sie E, während der Besuch von F im Speicher aufgezeichnet wird, die später besucht werden sollen.

E ist der aktuelle Scheitelpunkt. E hat keinen linken oder rechten Unterbaum (keine Kanten). Die letzte Aufzeichnung im Speicher zum Besuch war der richtige Unterbaum (Rand) für B. Der rechte Unterbaum für B besteht aus F, dem seine Kante vorausgeht. Zu diesem Zeitpunkt wird f besucht.

Die vorherige Aufzeichnung im Speicher für den jetzt besuchenden Besuch ist der richtige Unterbaum (Rand) für a. Der rechte Unterbaum für eine Aufzeichnung besteht aus C, gefolgt von seinen Kanten und Kindern. Zu diesem Zeitpunkt wird C besucht. C hat drei Kanten. Nach dem Algorithmus wird zuerst auf die linke Kante zugegriffen.

Wenn auf die linke Kante zugegriffen wird, wird G besucht. Es gibt kein Kind für g. Durch den Algorithmus teilt H denselben Elternteil mit G und wie es rechts von G ist, wird es als nächstes besucht.

"Ich" ist zufällig das Recht von H und teilt den gleichen Elternteil mit H. Durch den Algorithmus muss jeder Knoten am Recht eines anderen Knotens besucht werden, nachdem der Knoten besucht wurde. Es spielt keine Rolle, ob sich der gerade besuchte Knoten auf dem Recht eines anderen Knotens befindet. Also wird "Ich" als nächstes besucht.

Es gibt keinen Knoten am Recht von „Ich“. C und alle seine Nachkommen wurden besucht. Beachten Sie jedoch, dass es ein Knoten am rechten C -Recht gibt. Dieser Knoten ist d. Nach dem Algorithmus muss jeder Knoten am rechten Ruf eines anderen Knotens nach dem Knoten besucht werden (besucht). Es spielt keine Rolle, ob sich der besuchte Knoten auf dem Recht eines anderen Knotens befand. Also wird D als nächstes besucht.

D hat zwei Kinder, J und K. J ist links von k. J wird zuerst vor k besucht.

Tiefe-First-Suchalgorithmus kann wie folgt zusammengefasst werden: Besuchen Sie nach dem Besuch der Wurzel den linken Scheitelpunkt, während Sie rekursiv auf der linken Seite gehen. Besuchen Sie die rechten Geschwister dieses Scheitelpunkts von unten links und besuchen Sie die rechten Geschwister und gehen.

Damit lautet die DFS -Sequenz des vorherigen Baumes: A, B, E, F, C, G, H, I, D, J, K.

Zeitkomplexität

Der vorherige Baum hat 11 Scheitelpunkte und 10 Kanten. Wenn der Baum gut gelagert ist, umfasst das Scannen des gesamten Baumes 11 Scheitelpunkte und 10 Kanten. Dies ist eine Wertschätzung für die Geschwindigkeit des Betriebs der Tiefe-First-Suche. Es ist Zeitkomplexität. Es ist geschrieben als:

O (| v |+| e |)

Wo | v | ist die Anzahl der Eckpunkte (Knoten) und | e | ist die Anzahl der Kanten. Für diesen Baum beträgt die Gesamtsumme 21 = 11 + 10. Das „O“ muss da sein.

Struktur für den Baum

Die Baumorganisation kann wie folgt beschrieben werden:

Scheitelpunkt A: Kinder: B, C, D
Scheitelpunkt B: Kinder: E, F
Scheitelpunkt C: Kinder: G, H, ich
Scheitelpunkt D: Kinder: J, K
Scheitelpunkt e
Scheitelpunkt f
Scheitelpunkt g
Scheitelpunkt h
Scheitelpunkt i
Scheitelpunkt j
Scheitelpunkt k

Der vorherige Baum wird in einer nicht ordnungsgemäßen Vektoren gespeichert. Ein Scheitelpunkt ist ein Schlüssel, und die Kinder sind die Werte des Vektors des Schlüssels. Scheitelpunkte von E bis k haben keine Kinder.

C ++ - Codierung

Das Programm kann mit der folgenden Überschrift beginnen:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;

C ++-Codierung für die nicht ordnungsgemäßen Vektoren

Die unbestrahlten Vektoren werden mit dem folgenden Code erstellt:

Under Ordered_map > umv = 'a', 'b', 'c', 'd',
'B', 'e', 'f',
'C', 'g', 'h', 'i',
'D', 'j', 'k',
'E', ,
'F', ,
'G', ,
'H', ,
'ICH', ,
'J', ,
'K', ;


Dies kann direkt unter der vorherigen Überschrift platziert werden.

Die Tiefenfunktion

Es ist eine rekursive Funktion, die jeden besuchten Scheitelpunkt (Knoten) druckt. Es ist:

void tiefefirstSearch (char übergeordnet)
Cout << parent << "; //print vertex
für (int i = 0; iTiefenforschung (UMV [Eltern] [i]);


Nach dem Drucken des linken Scheitelpunkts druckte der For-Loop die rechten Scheitelpunkte. Die For-Schleife hat den Rückruf.

C ++ Hauptfunktion

Eine geeignete Hauptfunktion für das Programm ist:

int main (int argc, char ** argv)

tiefenstSearch ('a');
Cout << endl;
Rückkehr 0;


Der Algorithmus für die Tiefe-First-Suche lautet wie folgt:

1) Besuchen Sie den aktuellen Scheitelpunkt.
2) durch den linken Unterbaum des Stromscheitels rekursiv durchqueren.
3) durch den rechten Unterbaum des Stromscheitels rekursiv durchqueren.

Dies kann wie folgt interpretiert werden: Besuchen Sie nach dem Besuch der Wurzel den linken Scheitelpunkt und gehen Sie rekursiv auf der linken Seite nach unten. Besuchen Sie die rechten Geschwister dieses Scheitelpunkts von unten links von links und gehen.

Die Zeitkomplexität für den Tiefen-ersten-Suchalgorithmus ist:

O (| v |+| e |)

Abschluss

DFS steht für die Tiefe-First-Suche. Es bezieht sich darauf, wie Knoten eines Baumes besucht werden, bis sich der gewünschte Knoten befindet. Der Einfachheit halber wurden alle Knoten des Baumes dieses Artikels besucht. Die Idee ist, alle Knoten zu besuchen, wobei jeder Knoten einmal besucht wird. Ein Knoten wird auch als Scheitelpunkt bezeichnet. Tiefe-First-Suche kann in einer von drei Bestellungen vorliegen: Vorbestellung, Bestellung oder Nachbestellung. In diesem Artikel wurde vorbestellter Traversal verwendet.