Depth First Search (DFS) (Italiano)

Depth first Search o Depth first traversal è un algoritmo ricorsivo per la ricerca di tutti i vertici di un grafico o struttura dati ad albero. Traversal significa visitare tutti i nodi di un grafico.

Depth First Search Algorithm

Un’implementazione DFS standard mette ogni vertice del grafico in una delle due categorie:

  1. Visited
  2. Not Visited

Lo scopo dell’algoritmo è contrassegnare ogni vertice come visitato evitando i cicli.,

L’algoritmo DFS funziona come segue:

  1. Inizia mettendo uno qualsiasi dei vertici del grafico in cima a uno stack.
  2. Prendi l’elemento superiore dello stack e aggiungilo all’elenco visitato.
  3. Crea un elenco dei nodi adiacenti di quel vertice. Aggiungi quelli che non sono nell’elenco visitato in cima allo stack.
  4. Continua a ripetere i passaggi 2 e 3 fino a quando lo stack non è vuoto.

Depth First Search Example

Vediamo come funziona l’algoritmo di ricerca Depth First con un esempio. Usiamo un grafico non orientato con 5 vertici.,

grafico undirected con 5 vertici

partiamo dal vertice 0, l’algoritmo DFS comincia mettendo in Visitata elenco e mettendo tutti i suoi vertici adiacenti nello stack.

Visita l’elemento e inseriscilo nell’elenco visitato

Successivamente, visitiamo l’elemento nella parte superiore dello stack cioè 1 e andiamo ai suoi nodi adiacenti. Dal momento che 0 è già stato visitato, visitiamo 2 invece.,

Visita l’elemento in cima dello stack

Vertex 2 è un non visitati adiacente vertice in 4, quindi aggiungiamo che per la cima dello stack e la visita.

Il vertice 2 ha un vertice adiacente non visitato in 4, quindi lo aggiungiamo in cima allo stack e lo visitiamo.,
Il vertice 2 ha un vertice adiacente non visitato in 4, quindi lo aggiungiamo in cima allo stack e lo visitiamo.

Dopo aver visitato l’ultimo elemento 3, non ha nodi adiacenti non visitati, quindi abbiamo completato la prima traversata di profondità del grafico.,

Dopo aver visitato l’ultimo elemento 3, non ha nodi adiacenti non visitati, quindi abbiamo completato la prima Traversata di profondità del grafico.

DFS Pseudocodice (implementazione ricorsiva)

Lo pseudocodice per DFS è mostrato di seguito. Nella funzione init (), si noti che eseguiamo la funzione DFS su ogni nodo. Questo perché il grafico potrebbe avere due diverse parti disconnesse, quindi per assicurarci di coprire ogni vertice, possiamo anche eseguire l’algoritmo DFS su ogni nodo.,

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)}

Implementazione DFS in Python, Java e C/C++

Il codice per l’algoritmo di ricerca Depth First con un esempio è mostrato di seguito. Il codice è stato semplificato in modo che possiamo concentrarci sull’algoritmo piuttosto che su altri dettagli.

la Complessità di Profondità Prima Ricerca

La complessità temporale dell’algoritmo DFS è rappresentato in forma di O(V + E), dove V è il numero di nodi e di E è il numero di spigoli.

La complessità dello spazio dell’algoritmo è O(V).,

Applicazione dell’algoritmo DFS

  1. Per trovare il percorso
  2. Per verificare se il grafico è bipartito
  3. Per trovare i componenti fortemente connessi di un grafico
  4. Per rilevare cicli in un grafico

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *