kære læsere, i denne artikel vil jeg lede dig gennem begrebet dybde første søgning (DFS). Dette er en graf koncept, som er et fælles problem i mange konkurrencedygtige kodning eksamener. Så lad os se på at oprette en DFS-traversal ved hjælp af Python.
Indholdsfortegnelse
Hvad er dybde første søgning?
dybde-første søgning er en algoritme, der gør brug af stakken datastruktur til at krydse grafer og træer. Begrebet dybde-første søgning kommer fra ordet “dybde”. Træet krydser indtil dybden af en gren og derefter tilbage krydser til resten af knudepunkterne.
overvej en tom” stak”, der indeholder de besøgte noder for hver iteration. Vores opgave her er som følger:
- Start ved rodknuden og skub den på stakken.
- kontroller for eventuelle tilstødende knudepunkter i træet, og vælg en node.
- kryds hele grenen af den valgte node og skub alle knudepunkterne ind i stakken.
- når du når slutningen af en gren (ikke flere tilstødende knudepunkter), dvs.nth bladknude, skal du bevæge dig tilbage med et enkelt trin og kigge efter tilstødende knudepunkter i n-1. node.
- hvis der er tilstødende noder til n-1.node, skal du krydse disse grene og skubbe noder på stakken.
begrebet dybde første søgning illustreret
lad os se på vores eksempelgraf nedenfor:
A er rodnoden. Så da A er besøgt, skubber vi dette på stakken.
Stack : A
lad os gå til filialen A-B. B er ikke besøgt, så vi går til B og skubber B på stakken.
Stack : A B
nu er vi kommet til slutningen af vores A-B-gren, og vi flytter til n-1.node, som er A. Vi vil nu se på den tilstødende node af A, som er S. besøg S og skub den på stakken. Nu skal du krydse S-C-D-grenen, op til dybden dvs.op til D og markere S, C, D som besøgt.
Stack: A B S C D
da D ikke har andre tilstødende noder, skal du flytte tilbage til C og krydse dens tilstødende gren E-H-g til dybden og skubbe dem på stakken.
Stack : A B S C D E H G
når man når D, er der kun en tilstødende knude, dvs.F, som ikke besøges. Skub også F på stakken.
Stack : A B S C D E H G F
denne stak selv er traversal af DFS.
Kodningsdybde første søgealgoritme i Python
som du skal være opmærksom på, er der mange metoder til at repræsentere en graf, som er adjacency-listen og adjacency-matricen.
så i det følgende eksempel har jeg defineret en adjacency liste for hver af noderne i Vores graf.
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }
Bemærk: Denne adjacency liste kan indtastes fra brugeren og behøver ikke at være hard-kodet.
nu definerer vi vores DFS – funktion, der tager 3 parametre som input-grafen (adjacency list), en node og en liste over besøgte noder.
hvis den aktuelle node ikke er besøgt, dvs.ikke til stede på den besøgte liste, skal du markere den som besøgt og tilføje den til den besøgte liste.
Flyt til den næste node og send derefter rekursivt denne node til DFS-funktionen. På denne måde bevæger hver node sig til dybden og udskriver den som DFS-output.
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)
komplet kode og Output
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)
udgangen af ovenstående kode er som følger:
konklusion
jeg håber, du har fulgt denne tutorial om DFS-algoritmen og har været i stand til at forstå koden og eksemplet også. Prøv det ved hjælp af pen og papir ved siden af dig for at forstå traversals bedre.