djup första sökning (DFS)

djup första sökning eller djup första traversal är en rekursiv algoritm för att söka alla hörn av en graf eller träd datastruktur. Traversal innebär att du besöker alla noder i ett diagram.

djup första sökalgoritm

en standard DFS-implementering sätter varje vertex av grafen i en av två kategorier:

  1. besökte
  2. inte besökt

syftet med algoritmen är att markera varje vertex som besökt samtidigt som man undviker cykler.,

DFS-algoritmen fungerar enligt följande:

  1. börja med att sätta någon av grafens hörn ovanpå en stapel.
  2. ta det översta objektet i stapeln och lägg det till den besökta listan.
  3. skapa en lista över det vertex intilliggande noder. Lägg till de som inte finns i den besökta listan till toppen av stapeln.
  4. fortsätt upprepa steg 2 och 3 tills stapeln är tom.

djup första Sökexempel

Låt oss se hur djup första sökalgoritmen fungerar med ett exempel. Vi använder en oriktad graf med 5 hörn.,

oriktad graf med 5 hörn

vi börjar från vertex 0, DFS-algoritmen börjar genom att sätta den i den besökta listan och sätta alla dess intilliggande hörn i stapeln.

besök elementet och lägg det i den besökta listan

därefter besöker vi elementet längst upp i stacken dvs 1 och går till dess intilliggande noder. Eftersom 0 redan har besökts, besöker vi 2 istället.,

besök elementet längst upp i stacken

Vertex 2 har ett oönskat intilliggande vertex i 4, så vi lägger det till toppen av stapeln och besöker den.

Vertex 2 har ett oönskat intilliggande vertex i 4, Så vi lägger det till toppen av stapeln och besöker den.,
Vertex 2 har ett oönskat intilliggande vertex i 4, Så vi lägger det till toppen av stapeln och besöker det.

Efter att vi besökt det sista elementet 3 har det inga oönskade intilliggande noder, så vi har slutfört grafens djup första Traversal.,

efter att vi besökt det sista elementet 3 har det inga oönskade intilliggande noder, så vi har slutfört grafens djup första Traversal.

DFS Pseudocode (rekursiv implementering)

pseudokoden för DFS visas nedan. I init () – funktionen märker du att vi kör DFS-funktionen på varje nod. Detta beror på att grafen kan ha två olika bortkopplade delar så att vi täcker varje vertex, vi kan också köra DFS-algoritmen på varje nod.,

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-implementering i Python, Java och c/c++

koden för djupets första sökalgoritm med ett exempel visas nedan. Koden har förenklats så att vi kan fokusera på algoritmen snarare än andra detaljer.

komplexiteten i djup första sökning

DFS-algoritmens tidskomplexitet representeras i form avO(V + E), därV är antalet noder ochE är antalet kanter.

algoritmens rymd ärO(V).,

tillämpning av DFS-algoritm

  1. för att hitta sökvägen
  2. för att testa om grafen är bipartite
  3. för att hitta de starkt anslutna komponenterna i ett diagram
  4. för att upptäcka cykler i ett diagram

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *