Qual è il significato di 'breadth' nella prima ricerca breadth?


11

Stavo imparando la prima ricerca dell'ampiezza e mi è venuta in mente una domanda sul perché BFS si chiama così. Nel libro Introduzione agli algoritmi di CLRS , ho letto il seguente motivo per questo:

La ricerca per ampiezza è così chiamata perché espande la frontiera tra vertici scoperti e non ancora scoperti uniformemente attraverso la larghezza della frontiera.

Tuttavia, non sono in grado di comprendere il significato di questa affermazione. Sono confuso su questa parola "frontiera" e ampiezza di quella frontiera.

Quindi, qualcuno può rispondere a questa domanda in un modo che è facile da capire per un principiante come me?


4
Nel caso in cui alcuni lettori non abbiano familiarità con il significato della parola inglese (al di fuori del suo utilizzo come parte di questo termine tecnico): merriam-webster.com/dictionary/breadth o Dictionary.cambridge.org/dictionary/english/breadth . È simile a "larghezza", una dimensione diversa da "profondità" se stai parlando della dimensione / forma di un oggetto fisico. E in senso metaforico come la profondità della conoscenza (esperto di una materia) rispetto all'ampiezza della conoscenza (molte materie).
Peter Cordes,

Risposte:


22

Considera la struttura dei dati utilizzata per rappresentare la ricerca. In un BFS, si utilizza una coda. Se ti imbatti in un nodo invisibile, lo aggiungi alla coda.

La "frontiera" è l'insieme di tutti i nodi nella struttura dei dati di ricerca. La coda eseguirà l'iterazione in sequenza di tutti i nodi della frontiera, ripetendo così l' ampiezza della frontiera. DFS eliminerà sempre lo stato scoperto più di recente dallo stack, quindi ripetendo sempre la parte più profonda della frontiera.

Considera l'immagine qui sotto. Notare come il DFS va direttamente nelle parti più profonde dell'albero mentre BFS scorre l'ampiezza di ogni livello.

dfs bfs

Immagine qui


2
Penso che la parola frontiera possa riferirsi al bordo dei nodi scoperti. Quando hai scoperto solo a, la frontiera è a. Quando hai scoperto a, b, c, la frontiera è b, c. Quando hai scoperto a, b, c, d, e, f, g, la frontiera è d, e, f, g. In altre parole, i nodi che sono stati scoperti e che non abbiamo ancora cercato oltre.
Theodoros Chatzigiannakis,

Penso che questo sia un punto giusto, ma penso che la "frontiera" possa essere interpretata in molti modi, con la spiegazione generale sopra ancora funzionante.
Throckmorton,

2

La citazione che dai dice "la frontiera tra vertici scoperti e non scoperti". Quindi questa è la frontiera di cui parla l'autore: la frontiera tra vertici scoperti e non ancora scoperti. Hai dei vertici che non hai ancora visto nulla. Hai anche dei vertici per i quali hai visto tutto. E poi hai i vertici in mezzo. Questi sono i vertici che hai guardato, ma non hai ancora caricato tutti i loro figli. Questa è la frontiera.

Ne discute ulteriormente su:

Per tenere traccia dell'avanzamento BFS colora ogni vertice bianco, grigio o nero. Tutti i vertici iniziano con il bianco e possono in seguito diventare grigi e poi neri. Il vertice viene scoperto la prima volta che viene rilevato durante la ricerca, quando diventa non bianco. Sono stati scoperti vertici grigi e neri, ma BFS li distingue per garantire che la ricerca proceda in modo BF.
...
ogni vertice è inizialmente bianco, è grigio quando viene scoperto nella ricerca ed è nero quando è finito, cioè quando la sua lista di adiacenza è stata esaminata completamente.

Quindi tutti i vertici iniziano in bianco (non scoperti). Quando viene scoperto un nodo, è di colore grigio (frontiera). Quando tutto ciò a cui punta è stato scoperto, è di colore nero (completamente scoperto). La frontiera è l'insieme di punti che sono stati scoperti, ma hanno bambini da scoprire.

Supponiamo che tu stia cercando qualcosa sul sito Web. Prima vai alla pagina principale. Supponiamo che sia etichettato "animali". La frontiera è attualmente {"animali"}. Guardi attraverso la pagina principale e non vedi quello che stai cercando. Ma noti che ha collegamenti ad altre due pagine, "quadrupedi" e "worm". Quindi fai clic sul link per "quadrupedi". Ora la frontiera è {"animali", "quadrupedi"}. Dai un'occhiata ai "quadrupedi" e non trovi quello che cerchi. Cosa fai dopo? Puoi cercare link su "quadrupedi" e seguirli oppure tornare a "animali" e fare clic sul link "worm". La prima è una ricerca approfondita e la seconda è una ricerca ampia.

"profondità" si riferisce a quanti collegamenti dal nodo radice sono necessari per raggiungere un nodo, mentre "larghezza" si riferisce ai nodi con la stessa profondità. Nell'esempio sopra, BFS inizia con "animali" e guarda prima tutti i nodi di profondità uno, quindi guarda prima "quadrupedi" e "vermi". Dopo aver esaminato tutti i nodi di profondità 1, espande la frontiera attraverso tutti quei nodi; vale a dire, esamina i figli di tutti i nodi di profondità 1 prima di guardare qualsiasi figlio di nodi di profondità 2. Ad esempio, se uno dei collegamenti nella pagina "quadrupedi" è "primati", esaminerà tutti i collegamenti nella pagina "worm" prima di esaminare qualsiasi collegamento nella pagina "primati".


1

un'un'un'2un'

In qualsiasi momento, la frontiera dell'onda è esattamente i vertici che sono memorizzati nella struttura dei dati della coda (questi vertici sono stati visitati ma non ancora esplorati ulteriormente).

un'un'

Kun'Kun'(K0)0{un'}un'un'

un'un'un'

Pertanto, DFS e BFS differiscono nell'ordine in cui visitano i vertici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.