BFS Python

BFS Python
Poszukiwanie w dziedzinie programowania jest głównie podzielone na dwa typy, wyszukiwanie głębokości (DFS) i wyszukiwanie pierwszego szerokości (BFS). Są to algorytmy wyszukiwania używanego do wyszukiwania lub przechodzenia na wykresie.

Pierwsze wyszukiwanie jest zjawiskiem przemieszczania każdego węzła wykresu lub drzewa, więc każdy węzeł jest przecinany przez dwie części. Jedna to część „odwiedzona”, a druga część „niewizytowa”. Oznacza to, że te wyszukiwanie ma na celu dotarcie do każdego węzła wykresu.

Pseudokod i algorytm BFS

  • Pierwszym krokiem jest umieszczenie dowolnego pierwszego węzła źródłowego w kolejce z tyłu.
  • Utwórz listę lub tablicę, a następnie umieść w niej węzły.
  • Użyj pętli, aby sprawdzić, czy kolejka nie jest pusta, a następnie usuwaj elementy na liście odwiedzonej.
  • Wszystkie usunięte elementy są oznaczone jako odwiedzone, a teraz usuwają również sąsiadów, którzy są również niewidoczerpani z kolejki.

Zastosowania BFS

  • Służy do nawigacji GPS.
  • Jest wykorzystywany do znalezienia ścieżki.
  • Jest wykorzystywany do budowania indeksu według indeksu wyszukiwania.
  • Wdrożenie BFS.

Przykład 1

Najpierw wprowadzamy wykres; Chcemy mieć wartości, które mają zostać przemierzone. Każdy węzeł zawiera dalej wartości. Na przykład tutaj pierwsza liczba 5 połączy się z dwoma węzłami 3 i 7. Podobnie wszystkie inne liczby są połączone z innymi węzłami, aby utworzyć wykres. Po zdefiniowaniu wykresu będziemy zawierać dwa typy danych liczb całkowitych tablicy, aby przechowywać wartości liczbowe wykresu, które mają zostać odwiedzone. Podczas gdy drugi obejmuje węzły, które są obok odwiedzanych.

Odwiedzone = []
Kolejka = []

Obie tablice są puste w momencie rozpoczęcia poszukiwania szerokości. Ale stopniowo te tablice zawierają wartości węzłów, jak opisaliśmy na wykresie.

Po wprowadzeniu dwóch tablic zdefiniujemy funkcję dostępu i przeszukiwania wszystkich węzłów pod względem linii. Ta funkcja przyjmuje wartości odwiedzonej tablicy, wykres i trzecim to węzeł. Wewnątrz funkcji dodamy wartości w obu tablicach, jak opisano w algorytmie; Po pierwsze, wartości są wprowadzane do „kolejki”; Po odwiedzeniu ten konkretny węzeł jest następnie przenoszony do odwiedzonej kolejki. Tak więc na razie ta funkcja doda wartości w tablicach za pomocą funkcji dołączania dla każdej tablicy. Ta funkcja zawiera węzły jako parametr.

Odwiedzone.Dodatek (węzeł)
Kolejka.Dodatek (węzeł)

Następnie będziemy teraz uzyskiwać dostęp do węzłów poprzez podejście. Ten sposób dostępu do węzłów jest podobny do dostępu do tablic, ponieważ zawsze stosujemy pętlę do odwiedzenia każdego indeksu iteracyjnie. W przypadku BFS użyjemy pętli white, a w środku w tym pętli dodaje się pętlę, aby zaspokoić warunek używany przez pętlę When.

To, gdy pętla będzie bezpośrednio ukierunkować kolejkę, ponieważ węzły zostaną najpierw dodane do kolejki, a następnie do tablicy odwiedzonej. Więc wartości zostaną wyodrębnione przez funkcję pop () i będą przechowywane w odpowiednich zmiennych.

M = kolejka. Pop (0)

Ta wartość zostanie wyświetlona na wywołaniu funkcji drukowania. Teraz, gdy wartości z kolejki zostaną wyodrębnione, wartość ta zostanie użyta do zlokalizowania sąsiadów, którzy mają zostać wprowadzone w kolejce. Dlatego użyjemy pętli tutaj, aby przydzielić każdego sąsiada do końca wykresu. Zastosowany tutaj warunek polega na tym, że jeśli wartość nie jest w odwiedzonej tablicy, oznacza to, że nie została dostępna wcześniej, wówczas odwiedzona tablica zostanie dodana przez te nowe wartości (sąsiad) za pośrednictwem funkcji załącznika. I podobnie kolejka otrzyma również wartość nowych sąsiadów.

Odwiedzone. Dodatek (sąsiad)

Wywołanie funkcji jest wykonywane wraz z wizytowaną tablicą, całym wykresem i węzłem jako parametr.

BFS (odwiedzone, wykres, „5”)

Po użyciu tego kodu możesz zobaczyć odpowiednie wyjście za pośrednictwem konsoli, używając przycisku wykonania u góry paska narzędzi.

Widać, że cała ścieżka będzie dostępna przez węzły. Można zaobserwować jedno: wszystkie te początkowe węzły są wyświetlane tylko dlatego, że za każdym razem przed funkcją drukowania węzły te wyskakują z kolejki.

Przykład 2

Ten przykład działa na tej samej technice: wyszukiwanie wewnątrz wykresu lub drzewa. Ale tutaj zastosowaliśmy podejście OOP (programowanie obiektowe) w Pythonie za pomocą systemu klasowego. Najpierw zaimportujemy niektóre funkcje z biblioteki kolekcji. Funkcje te obejmują „Defaultdict”, który zawiera słownik w języku Python.

Przechodząc do klasy, najpierw definiujemy nazwę klasy, a w klasie, oto konstruktor. Ponieważ konstruktory są funkcjami, które są wykonywane automatycznie, gdy tworzymy obiekt klasy. Obiekt klasy jest potrzebny do uzyskania dostępu do funkcji klasy. Utworzymy również obiekt dla klasy wykresu w dalszej części artykułu. Po pierwsze, konstruktor jest tutaj zdefiniowany, aby zainicjować listę wykonaną jako wykres.

Defaultdict (lista)

„Jest” używany do przechowywania wykresu w domyślnym słowniku.

Następnie używana jest tutaj funkcja „dodana”, aby dodać nowy węzeł lub krawędź do wykresu. Węzły są również znane jako krawędzie i są reprezentowane przez „u,.„Natomiast odległość między krawędziami jest reprezentowana przez wierzchołek i jest wspomniany przez„ v.„Więc wewnątrz funkcji wykres będzie bawiony nowymi węzłami za pośrednictwem funkcji dodatkowej.

Samego siebie.wykres [u]. Dodatek (v)

Tutaj użyliśmy również funkcji do wyświetlania BFS na wykresie. Początkowo wszystkie węzły są zadeklarowane, ponieważ nie są odwiedzane. Na pierwszym etapie wyszukiwania ogłosimy status FAŁSZ.

Odwiedzone = [false] * (max (jaźń.wykres) + 1)

Podobnie kolejka jest inicjowana jako zerowa w momencie tworzenia.

Kolejka = []

Porozmawiajmy teraz o węźle źródłowym, który jest pierwszym; Wpiszymy do niego w odwiedzonej tablicy i wyodrębnimy z kolejki, tak jak to zrobiliśmy w pierwszym przykładzie.

Kolejka.Dodatek (y)
Odwiedzone [s] = prawda

Teraz pętla do czasu jest używana do odstąpienia wszystkich węzłów z kolejki, a następnie wydrukować wartość.

S = kolejka.Pop (0)

Następnie wszystkie węzły sąsiedniego sąsiedztwa zostaną wyodrębnione z kolejki; Jeśli jakikolwiek węzeł zostanie już odwiedzony, zostanie to wprowadzone do odwiedzonej kolejki. IF-STATEMENT służy do sprawdzenia, czy węzeł nie jest już odwiedzany, a następnie dołącz go z kolejki i wprowadź go w odwiedzonej tablicy.

G = GHAGHT () jest w jakiś sposób sposób na stworzenie obiektu konstruktora, a ten obiekt jest dalej używany do wywołania dodanej funkcji wraz z wartościami sąsiada.

Wniosek

Artykuł „BFS-Python” zawiera krótki opis wyszukiwania szerokości na wykresie, aby przejść do każdego węzła. Ten proces wyszukiwania odbywa się poprzez posiadanie dwóch list, które zawierają w nich odwiedzone i niewidoczne węzły. Opracowaliśmy tę koncepcję, dodając dwa podstawowe przykłady w przewodniku.