Ricerca in ampiezza (BFS
)
BFS
(breadth-first search,
breadth-first search) - un metodo di attraversamento di grafi, molto spesso utilizzato sia in algoritmi semplici che avanzati. La ricerca in ampiezza funziona scorrendo i singoli livelli del grafico, partendo dal nodo sorgente e allontanandosi gradualmente da esso. Questo è chiaramente mostrato nell'animazione.
Per scrivere il BFS
più semplice, devi essere in grado di lavorare con una struttura di dati che ti permetta di prendere dall'inizio e metterlo alla fine, ed essere anche in grado di memorizzare il grafico sotto forma di lista di adiacenza (cioè con una coda ).
Descrizione formale dell'algoritmo
1) Posiziona nella coda inizialmente vuota il numero del vertice da cui inizia la ricerca.
2) Estrai il vertice U
dall'inizio della coda e contrassegnalo come utilizzato in un array separato.
3) Alla fine della coda, aggiungiamo tutti i vertici che possiamo raggiungere utilizzando lo spigolo dal vertice U,
e che non sono ancora etichettati.
4) Se la coda è vuota, tutti i nodi del grafo connesso sono stati scansionati, altrimenti torna al passaggio 2.
Complessità
Poiché l'algoritmo visita tutti i nodi del grafo nel caso peggiore, quando si memorizza il grafo come liste di adiacenza, la complessità temporale dell'algoritmo è O(|V| + |E|)
, dove V
è l'insieme dei vertici del grafo, e E
è l'insieme degli spigoli. In altre parole, l'algoritmo funziona nel caso peggiore per numero di spigoli + numero di vertici.