Ist der greedy-best-first-search-Algorithmus unterscheidet sich von der best-first-search-Algorithmus?
Ist die gierig best-first-search-Algorithmus unterscheidet sich von der best-first-search-Algorithmus?
Den wiki-Seite hat einen separaten Absatz über Gierig BFS aber es ist ein wenig unklar.
Mein Verständnis ist, dass Greedy BFS gerade BFS, wo die "besten Knoten aus OPEN" in der wikipedia-Algorithmus ist eine Heuristik-Funktion berechnet für einen Knoten. Damit die Umsetzung dieser:
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
mit "besten Knoten aus OPEN, das eine heuristische Funktion, die Schätzung, wie nahe sich der Knoten an das Ziel, ist tatsächlich Gierig BFS. Bin ich im Recht?
EDIT: Kommentar auf Anonymouse Antwort:
Also im wesentlichen eine gierige BFS nicht brauchen eine "OFFENE Liste" und sollte als Grundlage für Ihre Entscheidungen nur auf den aktuellen Knoten? Ist dieser Algorithmus 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Best first" ermöglichen könnte überarbeitung die Entscheidung, in der Erwägung, dass ein greedy-Algorithmus, sollte die Entscheidung endgültig ist und nicht revidiert.
Z.B. A*-Suche best-first-Suche, aber er ist nicht geizig.
Beachten Sie jedoch, dass diese Begriffe nicht immer mit den gleichen Definitionen. "Gierig" bedeutet in der Regel, dass die Entscheidung noch nie revidiert, schließlich akzeptieren suboptimale Lösungen auf den nutzen von Verbesserungen in der Laufzeit. Allerdings, ich Wette, Sie finden Situationen, in denen "gierige" ist für die Kombination von "best first + Tiefe zuerst" in "versuchen Sie, erweitern Sie den besten nächsten Schritt, bis wir auf eine Sackgasse, kehren Sie dann zum vorherigen Schritt und fahren Sie mit dem nächsten besten" (was ich nennen würde ein "priorisiert" Tiefe zuerst").
Auch, es hängt davon ab, auf welcher Ebene der Abstraktion Sie reden. A* ist nicht gierig in "building a path". Es ist in Ordnung zu halten, eine große Gruppe offener Pfade um. Es ist jedoch gierig in "erweitert den Suchraum" für die wahre kürzesten Weg.
BFS ist eine Instanz von Baum suchen und graph search algorithmen, in dem ein Knoten ausgewählt, für den ausbau auf der Grundlage der Auswertung der Funktion
f(n) = g(n) + h(n)
, wog(n)
ist die Länge des Pfades von der Wurzel zun
undh(n)
ist eine Schätzung der Länge des Pfades vonn
zu den Ziel-Knoten. In einem BFS-Algorithmus, wird der Knoten mit der niedrigsten Bewertung (d.h. niedrigstef(n)
) ausgewählt ist, für den ausbau.Gierig BFS verwendet die folgenden Bewertungsfunktion
f(n) = h(n)
, das ist nur die heuristische Funktionh(n)
, die Schätzungen der Nähe vonn
zum Ziel. Daher gierig das BFS versucht, um den Knoten zu erweitern, dass gedacht ist, dass Sie am nächsten zum Ziel, ohne Berücksichtigung der zuvor gesammelten wissen (d.h.g(n)
).Zusammenfassend ist zu sagen, der Hauptunterschied zwischen diesen (ähnlichen) Methoden suchen, ist die Auswertung der Funktion.
Als eine Randnotiz, den A* - Algorithmus ist eine best-first-search-Algorithmus, in dem die heuristische Funktion
h
ist eine zulässige Heuristik (d.h.h
ist immer eine Unterschätzung der perfekte heuristische Funktionh*
für allen
). A* ist nicht eine gredy BFS-Algorithmus, da seine Bewertung Funktion istf(n) = g(n) + h(n)
.Soweit ich das verstanden habe, "best-first-search" ist nur eine Sammelbezeichnung für eine bestimmte Suche Technik, in denen Sie eine heuristische evaluation-Funktion h(n).
Also, A* und greedy-best-first-search-algorithmen, die in diese Kategorie fallen.