Greedy-Algorithmus
Greedy-Algorithmen oder gierige Algorithmen bilden eine spezielle Klasse von Algorithmen, die in der Informatik auftreten. Sie zeichnen sich dadurch aus, dass sie schrittweise den Folgezustand auswählen, der zum Zeitpunkt der Wahl den größten Gewinn bzw. das beste Ergebnis (berechnet durch eine Bewertungsfunktion) verspricht (z. B. Gradientenverfahren).
Greedy-Algorithmen sind oft schnell, lösen viele Probleme aber nicht optimal.
Optimierungsprobleme auf Unabhängigkeitssystemen
Ein Greedy-Algorithmus findet für ein Optimierungsproblem auf Unabhängigkeitssystemen genau dann die optimale Lösung für alle Bewertungsfunktionen, 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.
Algorithmus für das Maximierungsproblem
Zu einem Matroid sei eine Gewichtsfunktion gegeben. Der folgende Algorithmus findet eine schwerste unabhängige Menge, bestimmt also ein , das maximiert:
1 // Ordne alle Elemente in nach absteigendem Gewicht
2
3
4 ;
5
6 for (k = 1; k <= n; k++) {
7 if
8
9 }
10
11 Ausgabe der Lösung
Verallgemeinerbarkeit
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, kann auf die Lösung des Maximierungsproblems zurückgeführt werden, indem man die Gewichte durch ihre additiven Inversen ersetzt.
Laufzeit
Ist L die Laufzeit der Prüfung einer Menge auf Unabhängigkeit, so ist die Laufzeit des Algorithmus durch 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.
Algorithmus für das Minimierungsproblem
Zu einem Matroid sei eine Gewichtsfunktion gegeben. Der folgende Algorithmus findet eine leichteste Basis, bestimmt also unter den kardinalitätsmaximalen eines, das minimiert:
- Sortiere E, so dass mit
- T := E
- Für jedes i von 1 bis n:
- Enthält eine Basis, so setze .
- Gib T aus.
Vergleich zum Maximierungsproblem, Verallgemeinerbarkeit
Da positive Gewichte vergeben sind, 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.
Laufzeit
Ist L die Laufzeit der Prüfung, ob eine Teilmenge von E Obermenge einer Basis ist, so ist die Laufzeit des Algorithmus durch 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.
Beispiele
- Algorithmus von Kruskal für die Suche nach einem minimalen Spannbaum
- Algorithmus von Prim für die Suche nach einem minimalen Spannbaum (das zugrundeliegende Mengensystem – die Menge der Bäume – ist aber kein Unabhängigkeitssystem)
- Algorithmus von Dijkstra zur Suche eines kürzesten Weges
- Algorithmus Sukzessive Einbeziehung zum Lösen von kombinatorischen Optimierungsproblemen
Literatur
- Thomas H. Cormen, Charles Leiserson, Ronald L. Rivest, Clifford Stein: Introduction to Algorithms. 2. Auflage. MIT Press, 2001, ISBN 0-262-53196-8.
- Bernhard Korte, Jens Vygen: Combinatorial Optimization. 3. Auflage. Springer, 2005, ISBN 3-540-25684-9.
- James Oxley: Matroid Theory. Oxford Mathematics 1992. ISBN 0-19-853563-5.
- Christos H. Papadimitriou und Kenneth Steiglitz: Combinatorial Optimization. Algorithms and Complexity. Prentice Hall Inc. 1982. ISBN 0-13-152462-3.
- Jon Lee: A First Course in Combinatorial Optimization. Cambridge Texts in Applied Mathematics 2004. ISBN 0521010128.
- Sven Oliver Krumke und Hartmut Noltemeier: Graphentheoretische Konzepte und Algorithmen. 2. Auflage Vieweg-Teubner 2009. ISBN 978-3-8348-0629-1.