Hloubka první vyhledávací algoritmus pomocí Pythonu

Vážení čtenáři, v tomto článku vás provedu konceptem hloubkového prvního vyhledávání (DFS). Jedná se o koncept grafu, který je běžným problémem v mnoha konkurenčních kódovacích zkouškách. Podívejme se tedy na vytvoření DFS traversal pomocí Pythonu.

obsah

co je hloubka první vyhledávání?

hloubkové vyhledávání je algoritmus, který využívá datovou strukturu zásobníku k procházení grafů a stromů. Koncept hloubkového vyhledávání pochází ze slova „hloubka“. Strom prochází až do hloubky větve a pak zpět přechází do zbytku uzlů.

zvažte prázdný „zásobník“, který obsahuje navštívené uzly pro každou iteraci. Náš úkol je následující:

  1. Začněte v kořenovém uzlu a zatlačte jej na zásobník.
  2. zkontrolujte všechny sousední uzly stromu a vyberte jeden uzel.
  3. projděte celou větev vybraného uzlu a zatlačte všechny uzly do zásobníku.
  4. po dosažení konce větve (žádné další sousední uzly), tj. n-tého uzlu listu, přesuňte se o jediný krok zpět a vyhledejte sousední uzly N-1.uzlu.
  5. pokud existují sousední uzly pro N-1. uzel, projděte tyto větve a zatlačte uzly na zásobník.

Pojem Hloubka První Hledat Ilustrované

Pojďme se podívat na náš příklad grafu níže:

Obrázek 8
Příklad Grafu

je kořenový uzel. Takže když je A navštíveno, zatlačíme to na stoh.

Stack : A

pojďme na větev A-B. B není navštívena, takže jdeme do B a zatlačíme B na stoh.

Stack : A B

Teď, přišli jsme na konci našeho A-B branch a přesuneme n-1 uzlů, což je A. podíváme se teď na sousední uzel, který se. S. Navštivte S a zatlačte jej do zásobníku. Nyní musíte projít větev S-C-D až do hloubky, tj. až do D a označit S, C, D, jak jste navštívili.

Stack: A B S C D

Protože D nemá žádné jiné sousední uzly, přesunout zpět na C a procházet jeho přilehlé pobočce E-H-G do hloubky a tlačit je do zásobníku.

Stack : A B S C D E H G

po dosažení D, existuje pouze jeden sousední uzel ie F, který není navštíven. Zatlačte F také na stoh.

Stack : A B S C D E H G F

tento zásobník sám o sobě je průchodem DFS.

Kódování Hloubka První Hledat Algoritmus v Pythonu

Jak si musí být vědomi toho, existuje mnoho metod představuje graf, který je sousednosti seznam sousednosti a matice.

takže v následujícím příkladu jsem definoval seznam sousedství pro každý z uzlů v našem grafu.

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

Poznámka: Tento seznam sousedství může být zadán od uživatele a nemusí být pevně zakódován.

nyní definujeme naši funkci DFS, která bere jako vstup 3 parametry-graf (seznam sousedství), uzel a seznam navštívených uzlů.

pokud aktuální uzel není navštíven, tj. není přítomen v navštíveném seznamu, označte jej jako navštívený a připojte jej do navštíveného seznamu.

přesuňte se na další uzel a poté rekurzivně předejte tento uzel do funkce DFS. Tímto způsobem se každý uzel přesune do hloubky a vytiskne jej jako výstup 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)

Kompletní Kód a Výstup

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)

výstupem výše uvedeného kódu je následující:


Závěr

doufám, že jste sledovali tento návod na DFS algoritmus a byly schopni pochopit kód a příklad také. Vyzkoušejte to pomocí pera a papíru vedle sebe, abyste lépe porozuměli traverzám.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

More: