Syvyys Ensin-Haku (DFS)

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:

  1. Vieraili
  2. Ei Vierailtu

tarkoitus algoritmi on merkitä kunkin huippupiste, kuten kävi välttäen sykliä.,

DFS-algoritmi toimii seuraavasti:

  1. Aloita laittamalla tahansa yksi kuvaaja on vertices päälle pinon.
  2. ota pinon kärkikohde ja lisää se vieraslistalle.
  3. Luo luettelo siitä Vertexin vierekkäisistä solmuista. Lisää pinon päälle ne, jotka eivät ole vierailulistalla.
  4. 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ä.,

Suuntaamaton verkko, jossa on 5 vertices

aloitamme vertex 0, DFS-algoritmi alkaa asettamalla se Vieraili lista ja laittaa kaikki sen vierekkäisten vertices pinossa.

Käy elementti ja laita se vieraili list

Seuraavaksi käymme elementin yläreunassa pino eli 1. ja mennä sen viereiset solmut. Koska 0 on jo käynyt, käymme 2 sijaan.,

Käy elementin yläreunassa pino

Vertex 2 on avaamaton vieressä vertex 4, joten olemme lisätä, että päällimmäinen ja käydä se.

Vertex 2 on avaamaton vieressä vertex 4, joten olemme lisätä, että päällimmäinen ja käydä se.,
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.,

Jälkeen vierailemme 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

  1. löytää polku
  2. testata, jos graafi on kaksijakoinen
  3. löytää vahvasti kytkettyjen komponenttien kuvaaja
  4. havaitsemiseksi sykliä kuvaajan

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *