Greedy-Algorithmen bzw. Gierige Algorithmen bilden eine spezielle Klasse von Algorithmen, wie sie in der Informatik auftreten. Sie zeichnen sich dadurch aus, dass sie schrittweise denjenigen Folgezustand auswählen, der zum Zeitpunkt der Wahl den größten Gewinn bzw. das beste Ergebnis verspricht (z.B. Gradientenverfahren). Um unter den Folgezuständen eine Auswahl zu treffen, wird oft eine Bewertungsfunktion verwendet.
Greedy-Algorithmen sind meist schnell, lösen viele Probleme aber nicht optimal.
Inhaltsverzeichnis |
Ein Greedy-Algorithmus findet für ein Optimierungsproblem auf Unabhängigkeitssystemen die optimale Lösung, wenn die zulässigen Lösungen die unabhängigen Mengen eines Matroids sind. Sonst führt der Algorithmus lediglich zu einem lokalen Optimum. Beispiele dafür sind das Rucksackproblem und das Problem des Handlungsreisenden. Bei diesen Problemen ist es wesentlich aufwändiger, die optimale Lösung zu finden, da die Probleme NP-vollständig sind.
Zu einem Matroid (E,U) sei eine Gewichtsfunktion
gegeben. Der folgende Algorithmus findet eine schwerste unabhängige Menge, bestimmt also ein
, das
maximiert:
01 // Ordne alle Elemente in E nach absteigendem Gewicht 0203 04
; 05 06 for (k = 1; k <= n; k++) { 07 if
08
09 } 10 11 Ausgabe der Lösung T
Der Algorithmus löst auch Maximierungs- und Minimierungsprobleme zu beliebigen Gewichtsfunktionen
: In einer Lösung für das Maximierungsproblem treten negative Gewichte nicht auf, Elemente mit negativem Gewicht können also vom Algorithmus ignoriert werden. Die Lösung des Problems, eine minimale unabhängige Menge zu finden, können wir auf die Lösung des Maximierungsproblems zurückführen, indem wir die Gewichte durch ihre additiven Inversen ersetzen.
Ist L die Laufzeit der Prüfung einer Menge auf Unabhängigkeit, so ist die Laufzeit des Algorithmus durch O( | E | (log( | E | ) + L)) gegeben. Im besten Fall wird sie also durch das Sortierverfahren dominiert. Wenn die Unabhängigkeitsprüfung dagegen NP-vollständig ist, ist der Algorithmus praktisch nutzlos.
Zu einem Matroid (E,U) sei eine Gewichtsfunktion
gegeben. Der folgende Algorithmus findet eine leichteste Basis, bestimmt also unter den kardinalitätsmaximalen
eines, das
minimiert:
mit 
eine Basis, so setze
.Da wir positive Gewichte vergeben, ist das Problem, nach einer leichtesten Basis-Obermenge zu suchen, äquivalent. Dieses Problem ist dual zum Maximierungsproblem und kann analog auf beliebige Gewichtsfunktionen und das entsprechende Minimierungsproblem verallgemeinert werden.
Ist L die Laufzeit der Prüfung, ob eine Teilmenge von E Obermenge einer Basis ist, so ist die Laufzeit des Algorithmus durch O( | E | (log( | E | ) + L)) gegeben. Im besten Fall wird sie also durch das Sortierverfahren dominiert. Wenn die Basis-Obermengen-Prüfung dagegen NP-vollständig ist, ist der Algorithmus praktisch nutzlos.