Bestensuche
# Bestensuche

Bestensuche (engl. best-first search) ist ein Algorithmus zum Durchsuchen eines Graphen, bei dem in jeder Iteration der vielversprechendste Knoten gewählt wird, bewertet nach einer gewissen Heuristik. Damit zählt er zu den informierten Such-Algorithmen.
Judea Pearl beschrieb die Bestensuche als das Abschätzen der Kosten eines Knotens n nach einer "heuristischen Bewertungsfunktion $f(n)$, die im Allgemeinen abhängig von der Beschreibung von n ist, der Beschreibung des Ziels, den vom Algorithmus bis zu diesem Zeitpunkt gesammelten Informationen und vor allem vom Zusatzwissen über die Problemdomäne selbst."
Um den vielversprechendsten Folgeknoten zu bestimmen, wird in konkreten Implementierungen oftmals eine Vorrangwarteschlange verwendet.
Ein bekanntes Beispiel für die Bestensuche ist der A*-Algorithmus. Zur Wegfindung wird Bestensuche auch oftmals in der kombinatorischen Optimierung eingesetzt.

## Pseudo-Code

Diese Version des Algorithmus ist allerdings nicht vollständig, d. h., der gegebene Pseudo-Code findet nicht zu jeder möglichen Kombination von Start- und Zielknoten einen Weg, auch wenn dieser existiert. Beispielsweise verfängt sich der Algorithmus in einer Endlosschleife, sobald ein betrachteter Knoten keine Nachfolger mehr hat, außer dem Elternknoten selbst. In diesem Fall würde der Elternknoten erneut auf die OPEN-Liste gestellt, und daraufhin erneut betrachtet werden, was in einer endlosen Rekursion resultiert.
Die folgende Version erweitert den Algorithmus um eine zusätzliche CLOSED-Liste, die alle bereits bewerteten Knoten beinhaltet. Da somit kein Knoten zweimal besucht wird, werden hierdurch Endlosschleifen verhindert.