Hyvät lukijat, tässä artikkelissa aion opastaa käsitteen syvyys ensimmäinen haku (DFS). Tämä on kuvaaja käsite, joka on yleinen ongelma monissa kilpailukykyinen koodaus tentit. Niin, katsotaanpa luoda DFS traversal Python.
Sisällysluettelo
mikä on syvyys ensimmäinen haku?
syvyysetsintä on algoritmi, joka hyödyntää pinon tietorakennetta graafien ja puiden läpivientiin. Syvyysetsinnän käsite tulee sanasta ”syvyys”. Puu kulkee oksan syvyyteen asti ja sitten takaisin muihin solmukohtiin.
harkitse tyhjä ”pino”, joka sisältää vieraili solmut kunkin iteraation. Tehtävämme tässä on seuraava:
- Aloita juurisolmusta ja työnnä se pinoon.
- Tarkista puun kaikki vierekkäiset solmut ja valitse yksi solmu.
- läpikäy valitun solmun koko haaran ja työnnä kaikki solmut pinoon.
- kun päästään haaran päähän (ei enää vierekkäisiä solmuja) eli n: nnen lehtisolmun päähän, siirrytään yhdellä askeleella taaksepäin ja etsitään N-1.solmun vierekkäisiä solmuja.
- Jos N-1.solmulle on vierekkäiset solmut, kulje niiden haarojen läpi ja työnnä solmut pinon päälle.
syvyyden käsite ensimmäinen haku kuvitettu
tarkastellaan esimerkkikaaviota alla:
A on juurisolmu. Joten koska A on käynyt, työnnämme tämän pinoon.
Stack : A
mennään konttoriin A-B. B ei käy, joten menemme B: hen ja työnnämme B: n pinon päälle.
Stack : A B
nyt, olemme tulleet loppuun meidän A-B haara ja siirrymme n-1.solmu, joka on A. tarkastelemme nyt viereisen solmu, joka on S. käy s ja työnnä se pino. Nyt sinun täytyy kulkea s-C-d haara, jopa syvyys eli upto D ja mark S, C, d kuin vieraili.
Stack: A B S C D
koska D: llä ei ole muita vierekkäisiä solmuja, siirry takaisin C: hen ja ylitä sen viereinen haara E-H-G syvyyteen ja työnnä ne pinoon.
Stack : A B S C D E H G
saavuttaessa D, on vain yksi vierekkäinen solmu ie F, joka ei ole käynyt. Paina myös F pinoon.
Stack : A B S C D E H G F
tämä pino itsessään on DFS: n läpikulkumuoto.
Coding Depth first Search Algorithm in Python
Kuten täytyy olla tietoinen, on olemassa monia menetelmiä esittää graafi, joka on adjacency list ja adjacency matrix.
joten seuraavassa esimerkissä olen määritellyt adjukenssilistan jokaiselle graafimme solmulle.
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }
Huomautus: Tämä liitännäisluettelo voidaan syöttää käyttäjältä, eikä sitä tarvitse koodata.
nyt määrittelemme DFS-funktiomme, joka ottaa 3 parametria syötteeksi-kuvaajan (adjacency list), solmun ja listan vierailluista solmuista.
jos nykyistä solmua ei ole vierailtu ie ei ole vieraillussa luettelossa, merkitse se vierailluksi ja lisää se vierasluetteloon.
siirry seuraavaan solmuun ja siirrä tämä solmu rekursiivisesti DFS-funktioon. Näin jokainen solmu liikkuu syvyyteen asti ja tulostaa sen DFS-ulostulona.
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)
täydellinen koodi ja tuloste
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)
yllä olevan koodin tuloste on seuraava:
päätelmä
toivon, että olet noudattanut tätä opetusohjelmaa DFS-algoritmista ja pystynyt ymmärtämään koodin ja esimerkin. Älä kokeile sitä käyttämällä kynää ja paperia vieressäsi ymmärtää traversals paremmin.