Depth First search Algorithm using Python

Drodzy Czytelnicy, w tym artykule przeprowadzę was przez koncepcję głębokiego pierwszego wyszukiwania (DFS). Jest to koncepcja grafu, która jest częstym problemem w wielu konkurencyjnych egzaminach kodowania. Spójrzmy więc na tworzenie przejścia DFS przy użyciu Pythona.

spis treści

czym jest Depth First Search?

wyszukiwanie wgłębne jest algorytmem wykorzystującym strukturę danych stosu do przeszukiwania wykresów i drzew. Pojęcie głębokości-pierwsze wyszukiwanie pochodzi od słowa „głębokość”. Drzewo trawersuje aż do głębokości gałęzi, a następnie z powrotem trawersuje do reszty węzłów.

rozważ pusty „stos”, który zawiera odwiedzone węzły dla każdej iteracji. Nasze zadanie jest następujące:

  1. zacznij od węzła głównego i wciśnij go na stos.
  2. sprawdź, czy nie ma żadnych sąsiednich węzłów drzewa i wybierz jeden węzeł.
  3. przemierzaj całą gałąź wybranego węzła i wepchnij wszystkie węzły do stosu.
  4. po dotarciu do końca gałęzi (nie ma już sąsiednich węzłów) tj. n-tego węzła liści, cofnij się o jeden krok i poszukaj sąsiednich węzłów N-1-tego węzła.
  5. jeśli dla N-1-tego węzła są sąsiednie węzły, przemierzaj te gałęzie i wciśnij węzły na stos.

pojęcie głębokości pierwsze wyszukiwanie zilustrowane

spójrzmy na nasz przykładowy wykres poniżej:

Rysunek 8
przykładowy wykres

a jest węzłem głównym. Ponieważ A jest odwiedzane, naciskamy to na stos.

Stack : A

przejdźmy do gałęzi A-B. B nie jest odwiedzany, więc idziemy do B i wciskamy B na stos.

Stack : A B

teraz doszliśmy do końca naszej gałęzi A-B i przenosimy się do N-1 węzła, który jest A. przyjrzymy się teraz sąsiednim węzłom a, które są S. odwiedź S i wciśnij go na stos. Teraz musisz przemierzyć gałąź S-C-D, aż do głębokości tj. do D i zaznaczyć S, C, D jako odwiedzone.

Stack: A B S C D

ponieważ D nie ma innych sąsiednich węzłów, wróć do C i przemierz jego sąsiednią gałąź E-H-G na głębokość i wciśnij je na stos.

Stack : A B S C D E H G

po osiągnięciu D istnieje tylko jeden sąsiedni węzeł ie F, który nie jest odwiedzany. Naciśnij F na stos, jak również.

Stack : A B S C D E H G F

ten stos sam w sobie jest przejściem DFS.

głębokość kodowania pierwszy algorytm wyszukiwania w Pythonie

jak musisz być świadomy, istnieje wiele metod reprezentowania grafu, który jest listą adjacency i Macierzą adjacency.

tak więc w poniższym przykładzie zdefiniowałem listę adjacency dla każdego z węzłów na naszym wykresie.

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

Uwaga: Ta lista adjacency może być wprowadzona od użytkownika i nie musi być zakodowana na stałe.

teraz zdefiniujemy naszą funkcję DFS, która przyjmuje 3 parametry jako wejście-Wykres (lista adjacency), węzeł i listę odwiedzonych węzłów.

Jeśli bieżący węzeł nie jest odwiedzany, tj. nie znajduje się na liście odwiedzonych, zaznacz go jako odwiedzony i dodaj do listy odwiedzonych.

przejdź do następnego węzła, a następnie przekaż go rekurencyjnie do funkcji DFS. W ten sposób każdy węzeł przesuwa się do głębi i drukuje ją jako wyjście DFS.

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)

kompletny kod i wyjście

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)

wynik powyższego kodu jest następujący:


wniosek

mam nadzieję, że śledziłeś ten samouczek na temat algorytmu DFS i byłeś w stanie zrozumieć kod i przykład. Wypróbuj go za pomocą pióra i papieru obok, aby lepiej zrozumieć trawersy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

More: