Una domanda terminologica - la ricerca migliore per prima di Greedy è diversa dalla ricerca Best-first?La ricerca migliore per primo di Greedy è diversa dalla ricerca Best-first?
Il wiki page ha un paragrafo a parte su BFS Greedy ma è un po 'poco chiaro.
La mia comprensione è che Greedy BFS è solo BFS dove il "nodo migliore da OPEN" nell'algoritmo di wikipedia è una funzione euristica che si calcola per un nodo. Quindi, l'applicazione del presente:
OPEN = [initial state]
CLOSED = []
while OPEN is not empty
do
1. Remove the best node from OPEN, call it n, add it to CLOSED.
2. If n is the goal state, backtrace path to n (through recorded parents) and return path.
3. Create n's successors.
4. For each successor do:
a. If it is not in CLOSED: evaluate it, add it to OPEN, and record its parent.
b. Otherwise: change recorded parent if this new path is better than previous one.
done
con "miglior nodo da OPEN" essendo una funzione euristica valutando come chiudere il nodo è quello l'obiettivo, è in realtà Greedy BFS. Ho ragione?
EDIT: Commenta la risposta di Anonymouse:
Quindi, in sostanza un avido BFS non ha bisogno di una "lista aperta" e dovrebbe basare le proprie decisioni solo sul nodo corrente? È questo algoritmo GBFS:
1. Set START as CURRENT node
2. Add CURRENT to Path [and optinally, to CLOSED?]
3. If CURRENT is GOAL, exit
4. Evaluate CURRENT's successors
5. Set BEST successor as CURRENT and go to 2.
Come cambieresti l'algoritmo sopra per riflettere questo? – Alex
Non è applicabile a tutti i problemi. Ad esempio, nella ricerca di percorsi, un vero algoritmo avido spesso fallisce correndo in vicoli ciechi. Un "prioritized depth first" troverà un buon percorso, ma potrebbe mancare il migliore quando le scelte iniziali erano sbagliate. A * è la prima ricerca che termina solo quando è sicuro che non esiste un percorso migliore. –
Puoi commentare la modifica nella mia domanda? – Alex