Syvyys ensimmäinen Haku tai Syvyys ensimmäinen läpikäynti on rekursiivinen algoritmi etsii kaikki kärkipisteet kuvaajan tai puu tietorakenne. Traversal tarkoittaa vierailevat kaikki solmut kaavion.
Syvyys Ensimmäinen Haku Algoritmi
vakio DFS täytäntöönpano asettaa kunkin huippupiste kuvaajan kahteen luokkaan:
- Vieraili
- Ei Vierailtu
tarkoitus algoritmi on merkitä kunkin huippupiste, kuten kävi välttäen sykliä.,
DFS-algoritmi toimii seuraavasti:
- Aloita laittamalla tahansa yksi kuvaaja on vertices päälle pinon.
- ota pinon kärkikohde ja lisää se vieraslistalle.
- Luo luettelo siitä Vertexin vierekkäisistä solmuista. Lisää pinon päälle ne, jotka eivät ole vierailulistalla.
- toistakaa vaiheet 2 ja 3, kunnes pino on tyhjä.
Syvyys Ensin-Haku Esimerkki
katsotaanpa, miten Syvyys Ensimmäinen Haku algoritmi toimii esimerkkinä. Käytämme ohjaamatonta graafia, jossa on 5 verticeä.,
aloitamme vertex 0, DFS-algoritmi alkaa asettamalla se Vieraili lista ja laittaa kaikki sen vierekkäisten vertices pinossa.
Seuraavaksi käymme elementin yläreunassa pino eli 1. ja mennä sen viereiset solmut. Koska 0 on jo käynyt, käymme 2 sijaan.,
Vertex 2 on avaamaton vieressä vertex 4, joten olemme lisätä, että päällimmäinen ja käydä se.
sen Jälkeen kun me vierailla viimeinen osa 3, sillä ei ole mitään avaamaton viereiset solmut, joten meidän on valmistunut Syvyys Ensimmäinen Läpikäynti kuvaajan.,
DFS Pseudokoodina (rekursiivinen toteutus)
pseudokoodina varten DFS on esitetty alla. Init () – funktiossa huomaa, että suoritamme DFS-funktion jokaisella solmulla. Tämä johtuu siitä, että kuvaaja saattaa olla kaksi eri irrotettu osia, joten varmista, että me kattaa jokainen huippupiste, voimme myös suorittaa DFS algoritmin jokainen solmu.,
DFS(G, u) u.visited = true for each v ∈ G.Adj if v.visited == false DFS(G,v) init() { For each u ∈ G u.visited = false For each u ∈ G DFS(G, u)}
DFS Täytäntöönpanon Python, Java ja C/C++
– koodi Syvyys Ensimmäinen Haku Algoritmi esimerkki on esitetty alla. Koodia on yksinkertaistettu niin, että voimme keskittyä algoritmiin muiden yksityiskohtien sijaan.
Monimutkaisuus, Syvyys Ensin-Haku
aikakompleksisuus DFS-algoritmi on edustettuna muodossa O(V + E)
, jossa V
on solmujen määrä ja E
on särmiä.
tilaa monimutkaisuus algoritmin on O(V)
.,
Sovellus DFS-Algoritmi
- löytää polku
- testata, jos graafi on kaksijakoinen
- löytää vahvasti kytkettyjen komponenttien kuvaaja
- havaitsemiseksi sykliä kuvaajan