BFS Python

BFS Python
Die Suche im Programm der Programmierung ist hauptsächlich in zwei Typen unterteilt, die Tiefe-First-Suche (DFS) und die Breite-First-Suche (BFS). Dies sind die Algorithmen der Suche, die zum Suchen oder Durchlaufen in der Grafik verwendet werden.

Breite zuerst die Suche ist das Phänomen, jeden Knoten des Diagramms oder eines Baumes zu durchqueren, sodass jeder Knoten von zwei Teilen durchquert wird. Einer ist der "besuchte" Teil, und der andere ist der "nicht besuchte" Teil. Dies bedeutet, dass diese Suche darauf abzielt, jeden Knoten des Diagramms zu erreichen.

BFS Pseudocode und Algorithmus

  • Der erste Schritt besteht darin, einen ersten Quellknoten in die Warteschlange von hinten zu legen.
  • Erstellen Sie die besuchte Liste oder ein Array und geben Sie die Knoten hinein.
  • Verwenden Sie eine Weile Schleife, um zu überprüfen, ob die Warteschlange nicht leer ist, und entfernen Sie dann weiter.
  • Alle entfernten Gegenstände sind als besucht gekennzeichnet und entfernen nun auch die Nachbarn, die auch nicht von der Warteschlange besucht werden.

Anwendungen von BFS

  • Es wird für die GPS -Navigation verwendet.
  • Es wird verwendet, um den Weg zu finden.
  • Es wird verwendet, um den Index per Suchindex zu erstellen.
  • Implementierung von BFS.

Beispiel 1

Wir stellen zunächst die Grafik vor; Wir wollen die Werte haben, die durchquert werden sollen. Jeder Knoten enthält weiter die Werte. Zum Beispiel wird hier die erste Nummer 5 mit den beiden Knoten 3 und 7 verbunden. In ähnlicher Weise sind alle anderen Zahlen mit anderen Knoten verbunden, um eine Grafik zu bilden. Nach dem Definieren des Diagramms enthalten wir zwei Array -Ganzzahl -Datentypen, um die numerischen Werte des zu besuchenden Graphen zu speichern. Während der andere die Knoten enthält, die neben denen sind, die besucht werden.

Besucht = []
Warteschlange = []

Beide Arrays sind zum Zeitpunkt des Starts der Breite zuerst leer. Allmählich enthalten diese Arrays die Werte der Knoten, wie wir in der Grafik beschrieben haben.

Nachdem wir zwei Arrays eingeführt haben, werden wir eine Funktion definieren, um auf alle Knotenzeilen zuzugreifen und sie zu durchsuchen. Diese Funktion übernimmt die Werte des besuchten Arrays, des Diagramms und der dritte der Knoten. Innerhalb der Funktion fügen wir Werte in beiden Arrays hinzu, wie im Algorithmus beschrieben. Zunächst werden die Werte in der "Warteschlange" eingegeben. Wenn es besucht wird, wird dieser bestimmte Knoten dann in die besuchte Warteschlange übertragen. Für den Moment fügt diese Funktion die Werte in den Arrays mit einer Anhangsfunktion für jedes Array hinzu. Diese Funktion enthält die Knoten als Parameter darin.

hat besucht.anhängen (Knoten)
Warteschlange.anhängen (Knoten)

Danach werden wir nun auf die Knoten über einen Ansatz zugreifen und sie besuchen. Diese Art des Zugriffs auf die Knoten ähnelt dem Zugriff auf Arrays, da wir immer eine Schleife anwenden, um jeden Index iterativ zu besuchen. Im Fall von BFS werden wir eine Weile Schleife verwenden, und in dieser Schleife wird eine für die Schleife hinzugefügt, um den von der while -Schleifen verwendeten Zustand zu erfüllen.

Während der Schleife zielt die Warteschlange direkt an, da die Knoten zuerst zur Warteschlange und dann zum besuchten Array hinzugefügt werden. Daher werden die Werte über die Funktion pop () extrahiert und in jeweiligen Variablen gespeichert.

M = Warteschlange. Pop (0)

Dieser Wert wird auf dem Aufruf der Druckfunktion angezeigt. Wenn nun die Werte aus der Warteschlange extrahiert werden, wird dieser Wert verwendet, um seine Nachbarn zu lokalisieren, die in die Warteschlange eingegeben werden sollen. Wir werden hier für die Loop verwenden, um jeden Nachbarn bis zum Ende des Diagramms zuzuweisen. Die hier angewendete Bedingung ist, dass, wenn der Wert nicht im besuchten Array liegt, sondern nicht früher zugegriffen wurde, das besuchte Array von diesen neuen Werten (Nachbarn) über die Append -Funktion hinzugefügt wird. Und ähnlich erhält die Warteschlange auch den Wert der neuen Nachbarn.

hat besucht. Anhängen (Nachbar)

Der Funktionsaufruf wird zusammen mit dem besuchten Array, dem gesamten Diagramm und dem Knoten als Parameter durchgeführt.

BFS (besucht, Diagramm, '5')

Nachdem Sie diesen Code verwendet haben.

Sie können sehen, dass der gesamte Weg über die Knoten zugegriffen wird. Eine Sache kann hier beobachtet werden: Alle diese Startknoten werden nur angezeigt.

Beispiel 2

Dieses Beispiel funktioniert auf derselben Technik: Innerhalb des Diagramms oder eines Baumes suchen. Aber hier haben wir den Ansatz von OOP (objektorientierte Programmierung) in Python mit dem Klassensystem verwendet. Zuerst importieren wir einige Funktionen aus der Sammlungsbibliothek. Diese Funktionen enthalten das „Standarddict“, das das Wörterbuch in der Python -Sprache enthält.

Wenn wir uns in Richtung der Klasse bewegen, definieren wir zuerst den Klassennamen und innerhalb der Klasse hier ist der Konstruktor. Als Konstruktoren sind die Funktionen, die automatisch ausgeführt werden, wenn wir das Objekt der Klasse erstellen. Das Objekt der Klasse wird benötigt, um auf die Klassenfunktionen zuzugreifen. Wir werden das Objekt für die Grafikklasse später im Artikel auch erstellen. Erstens wird der Konstruktor hier definiert, um die als Diagramm aufgenommene Liste zu initialisieren.

Standarddict (Liste)

"Ist" verwendet, um das Diagramm im Standardwörterbuch zu speichern.

Danach wird hier eine Funktion verwendet, um den neuen Knoten oder die Kante zum Diagramm hinzuzufügen. Die Knoten sind auch als Kanten bekannt und werden durch 'u dargestellt,.Im Gegensatz dazu wird der Abstand zwischen den Kanten durch den Scheitelpunkt dargestellt und von 'V erwähnt.'In der Funktion wird das Diagramm also mit neuen Knoten über die Anhangfunktion unterhalten.

Selbst.Graph [u]. anhängen (v)

Hier haben wir auch eine Funktion verwendet, um die BFS eines Diagramms anzuzeigen. Zunächst werden alle Knoten deklariert, da sie nicht besucht werden. In der ersten Suchphase werden wir den Status als falsch erklären.

Besucht = [false] * (max (self.Grafik) + 1)

In ähnlicher Weise wird die Warteschlange zum Zeitpunkt der Schöpfung als Null initialisiert.

Warteschlange = []

Lassen Sie uns nun über den Quellknoten sprechen, der der erste ist. Wir werden es in das besuchte Array eingeben und es aus der Warteschlange extrahieren, wie wir es im ersten Beispiel getan haben.

Warteschlange.Anhänge (en)
Besucht [s] = true

Jetzt wird eine Weile verwendet.

S = Warteschlange.Pop (0)

Danach werden alle Knoten des angrenzenden Nachbarn aus der Warteschlange extrahiert. Wenn bereits ein Knoten besucht wird, wird dies in die besuchte Warteschlange eingegeben. Wenn die Nachfrage verwendet wird, um zu überprüfen, ob der Knoten noch nicht besucht wird, fügen Sie ihn aus der Warteschlange an und geben.

G = Graph () ist irgendwie ein Weg zur Erstellung von Objekten des Konstruktors, und dieses Objekt wird weiter verwendet, um die hinzugefügte Funktion zusammen mit den Nachbarwerten aufzurufen.

Abschluss

Der Artikel 'BFS-Python' enthält eine kurze Beschreibung der Breite-First-Suche im Diagramm, um jeden Knoten zu durchqueren. Dieser Suchprozess erfolgt durch zwei Listen, die die besuchten und nicht besuchten Knoten enthalten. Wir haben das Konzept ausgearbeitet, indem wir zwei elementare Beispiele in den Handbuch hinzugefügt haben.