Oft kommt es vor, dass in einer Menge von Objekten ein maximales Objekt gesucht ist. Beispielsweise ist unter allen erlaubten Spielzügen der bestmögliche Spielzug gesucht.
Ein entsprechendes Verfahren durchläuft mit einem Iterator alle erlaubten Spielzüge, wertet diese mit einer Bewertungsfunktion evaluate aus und merkt sich jeweils den dabei bisher gefundenen maximalen Wert maxval und den dazugehörigen besten Spielzug bestmove.
Die landläufige Inplementation dieses Verfahrens ist folgende:
Mithilfe einer Klasse Maximizer ist es möglich, eine solche Suche nach dem maximalen Objekt auszulagern und wiederverwendbar zu machen.
Ein Maximizer mit Typ-Parameter Type hat die Methoden
public void add(double v, Type x)
public double getMaxVal()
public Type getMaxObj()
Mit add wird ein Paar (Zahlenwert, Objekt) eingegeben. Der Maximizer merkt sich stets den eingegebenen größten Zahlenwert und das dazugehörige Objekt. Nach mehreren solcher add-Vorgänge liefert getMaxVal diesen größten Zahlenwert und getMaxObj das dazugehörige Objekt.
Unter Verwendung des Maximizers vereinfacht sich das obige Programm dann wie folgt; hier wird ein Maximizer mit Typ-Parameter Move verwendet.
Der Vorteil einer solchen Lösung mit einem Maximizer besteht darin, dass der Maximizer
ist.
Das Gegenstück zu einem Maximizer ist der Minimizer. Es ist sinnvoll, Maximizer und Minimizer in einem MiniMaximizer zu kombinieren, sodass entweder das Maximum oder das Minimum oder gleichzeitig beides gesucht werden kann.
Implementierungen in verschiedenen Programmiersprachen finden sich unter Basisklassen.
Weiter mit: [Iterator] oder [up]