Tiefensuchalgorithmus mit Python

Liebe Leserinnen und Leser, in diesem Artikel werde ich Sie durch das Konzept der Tiefensuche (DFS) führen. Dies ist ein Graphenkonzept, das in vielen Codierungsprüfungen ein häufiges Problem darstellt. Schauen wir uns also die Erstellung eines DFS-Traversals mit Python an.

Inhaltsverzeichnis

Was ist Depth First Search?

Die Tiefensuche ist ein Algorithmus, der die Stapeldatenstruktur verwendet, um Diagramme und Bäume zu durchlaufen. Das Konzept der Tiefensuche kommt vom Wort „Tiefe“. Der Baum durchquert bis zur Tiefe eines Zweigs und dann zurück zu den übrigen Knoten.

Betrachten Sie einen leeren „Stapel“, der die besuchten Knoten für jede Iteration enthält. Unsere Aufgabe ist hier wie folgt:

  1. Beginnen Sie am Stammknoten und schieben Sie ihn auf den Stapel.
  2. Suchen Sie nach benachbarten Knoten des Baums und wählen Sie einen Knoten aus.
  3. Durchqueren Sie den gesamten Zweig des ausgewählten Knotens und schieben Sie alle Knoten in den Stapel.
  4. Wenn Sie das Ende eines Zweigs erreicht haben (keine benachbarten Knoten mehr), dh den n-ten Blattknoten, gehen Sie um einen einzigen Schritt zurück und suchen Sie nach benachbarten Knoten des n-1-Knotens.
  5. Wenn für den n-1. Knoten benachbarte Knoten vorhanden sind, durchlaufen Sie diese Zweige und schieben Sie Knoten auf den Stapel.

Konzept der Tiefensuche Illustriert

Schauen wir uns unser Beispieldiagramm unten an:

 Bild 8
Beispielgraph

A ist der Wurzelknoten. Da also A besucht wird, schieben wir dies auf den Stapel.

Stack : A

Gehen wir zum Zweig A-B. B wird nicht besucht, also gehen wir zu B und schieben B auf den Stapel.

Stack : A B

Jetzt sind wir am Ende unseres AB-Zweigs angelangt und bewegen uns zum n-1. Knoten, der A ist. Jetzt müssen Sie den S-C-D-Zweig bis zur Tiefe, dh bis D, durchqueren und S, C, D als besucht markieren.

Stack: A B S C D

Da D keine anderen benachbarten Knoten hat, gehen Sie zurück zu C und durchqueren Sie den benachbarten Zweig E-H-G bis in die Tiefe und schieben Sie sie auf den Stapel.

Stack : A B S C D E H G

Bei Erreichen von D gibt es nur einen benachbarten Knoten, dh F, der nicht besucht wird. Drücken Sie F ebenfalls auf den Stapel.

Stack : A B S C D E H G F

Dieser Stapel selbst ist die Durchquerung des DFS.

Coding Depth First Search Algorithm in Python

Wie Sie wissen müssen, gibt es viele Methoden zur Darstellung eines Graphen, der die Adjazenzliste und die Adjazenzmatrix darstellt.

Im folgenden Beispiel habe ich für jeden Knoten in unserem Diagramm eine Adjazenzliste definiert.

graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }

Hinweis: Diese Adjazenzliste kann vom Benutzer eingegeben werden und muss nicht fest codiert sein.

Nun definieren wir unsere DFS–Funktion, die 3 Parameter als Eingabe verwendet – den Graphen (Adjazenzliste), einen Knoten und eine Liste der besuchten Knoten.

Wenn der aktuelle Knoten nicht besucht ist, dh nicht in der besuchten Liste vorhanden ist, markieren Sie ihn als besucht und hängen Sie ihn an die besuchte Liste an.

Gehe zum nächsten Knoten und übergebe diesen Knoten dann rekursiv an die DFS-Funktion. Auf diese Weise bewegt sich jeder Knoten bis zur Tiefe und druckt ihn als DFS-Ausgabe.

def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)

Vollständiger Code und Ausgabe

graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)

Die Ausgabe des obigen Codes lautet wie folgt:


Fazit

Ich hoffe, Sie haben dieses Tutorial zum DFS-Algorithmus befolgt und konnten den Code und das Beispiel ebenfalls verstehen. Probieren Sie es mit Stift und Papier neben sich aus, um die Traversen besser zu verstehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

More: