Kjære lesere, I denne artikkelen vil jeg gå deg gjennom begrepet Dybde Første Søk (Dfs). Dette er et grafkonsept som er et vanlig problem i mange konkurrerende kodingseksamener. Så, la oss se på å lage EN DFS traversal ved Hjelp Av Python.
Innholdsfortegnelse
Hva Er Dybde Første Søk?
dybdeførste søk er en algoritme som gjør Bruk Av Stack datastrukturen for å krysse grafer og trær. Begrepet dybde-første søk kommer fra ordet «dybde». Treet krysser til dybden av en gren og deretter tilbake traverser til resten av nodene.
Vurder en tom «Stabel» som inneholder de besøkte noder for hver iterasjon. Vår oppgave her er som følger:
- Start på rotnoden og skyv den på stakken.
- Se etter tilstøtende noder i treet og velg en node.
- Traversere hele grenen av den valgte noden og skyv alle noder inn i stakken.
- ved å nå enden av en gren (ikke flere tilstøtende noder) dvs.nth leaf node, flytt tilbake med et enkelt trinn og se etter tilstøtende noder av n-1th node.
- hvis det er tilstøtende noder for n-1-noden, krysser du disse grenene og skyver noder på stakken.
Dybdekonsept Første Søk Illustrert
La oss se på vårt eksempelgraf nedenfor:
A Er rotnoden. Så siden A er besøkt, skyver vi dette på stakken.
Stack : A
La oss gå til grenen A-B. B er ikke besøkt, så vi går Til B og skyver B på stakken.
Stack : A B
Nå har vi kommet til slutten av Vår A-b-gren, og vi flytter til n-1. node Som Er A. Vi vil nå se på den tilstøtende noden Til A som Er S. Besøk S og skyv den på stakken. Nå må du krysse S-C – d-grenen, opp til dybden dvs. Opp Til D og merk S, C, D som besøkt.
Stack: A B S C D
Siden D ikke har noen andre tilstøtende noder, flytt tilbake Til C og krysse den tilstøtende grenen E-H-G til dybden og skyv dem på stakken.
Stack : A B S C D E H G
Ved å nå D er det bare en tilstøtende node dvs. F som ikke er besøkt. Trykk F på stakken også.
Stack : A B S C D E H G F
denne stakken i seg selv er traverseringen AV DFS.
Kodedybde Første Søkealgoritme I Python
som du må være klar over, er det mange metoder for å representere en graf som er adjacency list og adjacency matrix.
så i følgende eksempel har jeg definert en adjacency liste for hver av nodene i grafen vår.
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }
Merk: Denne adjacency listen kan legges inn fra brukeren og trenger ikke være hardkodet.
nå vil vi definere VÅR DFS-funksjon som tar inn 3 parametere som input-grafen( adjacency list), en node og en liste over besøkte noder.
hvis gjeldende node ikke er besøkt, dvs. ikke til stede i den besøkte listen, merker du den som besøkt og legger den til i den besøkte listen.
Flytt til neste node og send deretter denne noden rekursivt inn I dfs-funksjonen. På denne måten beveger hver node til dybden og skriver den ut som DFS-utgangen.
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)
Komplett Kode Og Utgang
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)
utgangen av koden ovenfor er som følger:
Konklusjon
jeg håper du har fulgt denne opplæringen PÅ dfs algoritmen og har vært i stand til å forstå koden og eksemplet også. Prøv det med penn og papir ved siden av deg for å forstå traversalene bedre.