Gieriger Algorithmus
A Gieriger Algorithmus ist jeder Algorithmus Das folgt der Problemlösung Heuristik die lokal optimale Wahl in jeder Phase zu treffen.[1] Bei vielen Problemen führt eine gierige Strategie nicht zu einer optimalen Lösung, aber eine gierige Heuristik kann lokal optimale Lösungen liefern, die eine global optimale Lösung in angemessener Zeit annähern.
Zum Beispiel eine gierige Strategie für die Problem mit reisenden Verkäufern (Das ist von hoher Rechenkomplexität) ist die folgende Heuristik: "Besuchen Sie bei jedem Schritt der Reise die nächste nicht besuchte Stadt." Diese Heuristik beabsichtigt nicht, die beste Lösung zu finden, aber sie endet in einer angemessenen Anzahl von Schritten. Die Suche nach einer optimalen Lösung für ein solches komplexes Problem erfordert typischerweise unangemessen viele Schritte. In der mathematischen Optimierung lösen gierige Algorithmen kombinatorische Probleme mit den Eigenschaften von optimal Matroiden und geben Optimierungsproblemen mit der submodularen Struktur Konstant-Faktor-Näherungen.
Einzelheiten
Gierige Algorithmen produzieren gute Lösungen für einige Mathematische Probleme, aber nicht an anderen. Die meisten Probleme, für die sie arbeiten, werden zwei Eigenschaften haben:
- Greedy Choice -Eigenschaft
- Wir können die Wahl im Moment treffen und dann die Unterprobleme lösen, die später entstehen. Die Wahl eines gierigen Algorithmus kann von bisher getroffenen Entscheidungen abhängen, jedoch nicht von zukünftigen Entscheidungen oder allen Lösungen für das Unterproblem. Es trifft iterativ eine gierige Wahl nach dem anderen und reduziert jedes gegebene Problem in eine kleinere. Mit anderen Worten, ein gieriger Algorithmus überprüft nie seine Entscheidungen. Dies ist der Hauptunterschied zu Dynamische Programmierung, was erschöpfend ist und die Lösung garantiert findet. Nach jeder Phase trifft die dynamische Programmierung Entscheidungen auf der Grundlage aller in der vorherigen Phase getroffenen Entscheidungen und kann den algorithmischen Pfad der vorherigen Stufe zur Lösung überdenken.
- Optimale Unterstruktur
- "Ein Problemausstellungen optimale Unterstruktur Wenn eine optimale Lösung für das Problem optimale Lösungen für die Unterprobleme enthält. "[2]
Fälle von Scheitern
Gierige Algorithmen erzeugen für viele andere Probleme nicht die optimale Lösung und können sogar die produzieren Einzigartig schlechtestes Lösung. Ein Beispiel ist das Problem mit reisenden Verkäufern oben erwähnt: Für jede Anzahl von Städten gibt es eine Zuordnung von Entfernungen zwischen den Städten, für die die Heuristik der nächsten Nachbarn die einzigartige schlimmste Tour erzeugt.[3] Für andere mögliche Beispiele siehe Horizontffekt.
Typen
Gierige Algorithmen können als "kurzsichtig" und auch als "nicht reconabierbar" charakterisiert werden. Sie sind ideal nur für Probleme, die eine „optimale Unterstruktur“ haben. Trotzdem sind für viele einfache Probleme die am besten geeigneten Algorithmen gierig. Es ist jedoch wichtig zu beachten, dass der gierige Algorithmus als Selektionsalgorithmus verwendet werden kann, um Optionen innerhalb einer Suche oder ein Zweig-und-gebundener Algorithmus zu priorisieren. Es gibt einige Variationen des gierigen Algorithmus:
- Reine gierige Algorithmen
- Orthogonale gierige Algorithmen
- Entspannte gierige Algorithmen
Theorie
Gierige Algorithmen haben eine lange Geschichte des Studiums in Kombinatorische Optimierung und Theoretische Informatik. Es ist bekannt, dass gierige Heuristiken suboptimale Ergebnisse zu vielen Problemen erzielen.[4] Und so natürliche Fragen sind:
- Für welche Probleme funktionieren gierige Algorithmen optimal?
- Für welche Probleme garantieren gierige Algorithmen eine ungefähr optimale Lösung?
- Für welche Probleme sind der gierige Algorithmus garantiert nicht eine optimale Lösung erzeugen?
Eine große Anzahl von Literatur gibt es, um diese Fragen für allgemeine Klassen von Problemen zu beantworten, wie z. Matroidensowie für spezifische Probleme wie z. Deckung festlegen.
Matroiden
A Matroid ist eine mathematische Struktur, die den Begriff von verallgemeinert hat lineare Unabhängigkeit aus Vektorräume zu willkürlichen Sets. Wenn ein Optimierungsproblem die Struktur einer Matroid hat, löst der entsprechende gierige Algorithmus ihn optimal.[5]
Submodularfunktionen
Eine Funktion definiert auf Teilmengen eines Satzes wird genannt submodular Wenn für jeden wir haben das .
Angenommen, man möchte einen Satz finden was maximiert . Der gierige Algorithmus, der einen Satz aufbaut durch inkrementelles Hinzufügen des Elements, das zunimmt am meisten bei jedem Schritt produziert als Ausgabe einen Satz, der zumindest ist .[6] Das heißt, Giery spielt innerhalb eines konstanten Faktors von So gut wie die optimale Lösung.
Ähnliche Garantien sind nachweislich, wenn zusätzliche Einschränkungen wie Kardinalitätsbeschränkungen,[7] werden dem Ausgang auferlegt, obwohl oft geringfügige Abweichungen des gierigen Algorithmus erforderlich sind. Sehen [8] Für einen Überblick.
Andere Probleme mit Garantien
Andere Probleme, für die der gierige Algorithmus eine starke Garantie liefert, aber keine optimale Lösung, umfassen
Viele dieser Probleme haben die unteren Grenzen; d.h. der gierige Algorithmus funktioniert im schlimmsten Fall nicht besser als die Garantie.
Anwendungen
Gierige Algorithmen finden in der Regel (aber nicht immer) die global optimale Lösung nicht, da sie normalerweise nicht alle Daten ausführlich arbeiten. Sie können zu früh für bestimmte Entscheidungen verpflichtet und verhindern, dass sie später die beste Gesamtlösung finden. Zum Beispiel alle bekannt gierige Färbung Algorithmen für die Graph Färbungsproblem und alle anderen NP-Complete Probleme finden nicht konsequent optimale Lösungen. Trotzdem sind sie nützlich, weil sie sich schnell überlegen und oft das Optimum gute Annäherungen geben.
Wenn nachweislich ein gieriger Algorithmus nachweislich das globale Optimum für eine bestimmte Problemklasse liefert, wird er typischerweise zur Methode der Wahl, da er schneller als andere Optimierungsmethoden wie ist Dynamische Programmierung. Beispiele für solche gierigen Algorithmen sind Kruskals Algorithmus und Prims Algorithmus zur Findung Mindestüberschreitende Bäume und der Algorithmus zur Optimumfindung Huffman -Bäume.
Gierige Algorithmen erscheinen im Netzwerk Routing auch. Mit gierigem Routing wird eine Nachricht an den benachbarten Knoten weitergeleitet, der dem Ziel "am nächsten" ist. Der Begriff des Standorts eines Knotens (und damit der "Nähe") kann durch seinen physischen Standort wie in bestimmt werden Geografisches Routing benutzt von Ad -hoc -Netzwerke. Die Lage kann auch ein völlig künstliches Konstrukt sein wie in kleines Weltrouting und verteilte Hash -Tabelle.
Beispiele
- Das Aktivitätsauswahlproblem ist charakteristisch für diese Klasse von Problemen, bei denen das Ziel darin besteht, die maximale Anzahl von Aktivitäten auszuwählen, die nicht miteinander in Konflikt geraten.
- In dem Macintosh Computer Spiel Kristallquest Ziel ist es, Kristalle auf eine ähnliche Weise wie die zu sammeln Problem mit reisenden Verkäufern. Das Spiel hat einen Demo -Modus, in dem das Spiel einen gierigen Algorithmus verwendet, um zu jedem Kristall zu gehen. Das künstliche Intelligenz berücksichtigt keine Hindernisse, so dass der Demo -Modus häufig schnell endet.
- Das passende Verfolgung ist ein Beispiel für einen gierigen Algorithmus, der auf die Signalannäherung angewendet wird.
- Ein gieriger Algorithmus findet die optimale Lösung für Malfattis Problem drei disjunkte Kreise innerhalb eines bestimmten Dreiecks zu finden, die die Gesamtfläche der Kreise maximieren; Es wird vermutet, dass der gleiche gierige Algorithmus für eine beliebige Anzahl von Kreisen optimal ist.
- Ein gieriger Algorithmus wird verwendet, um einen Huffman -Baum während zu konstruieren Huffman -Codierung wo es eine optimale Lösung findet.
- Im EntscheidungsbaumlernenEs werden häufig gierige Algorithmen verwendet, sie werden jedoch nicht garantiert die optimale Lösung finden.
- Ein beliebter solcher Algorithmus ist der ID3 -Algorithmus Für Entscheidungsbaumkonstruktion.
- Dijkstra -Algorithmus und die verwandten Ein* Suchalgorithmus sind nachweislich optimale gierige Algorithmen für grafische Suche und kürzester Weg finden.
- Eine* Suche ist bedingt optimal und erfordert eine "zulässige Heuristik"Das wird die Pfadkosten nicht überschätzen.
- Kruskals Algorithmus und Prims Algorithmus sind gierige Algorithmen zum Konstruktion Mindestüberschreitende Bäume von einem gegebenen verbundenes Diagramm. Sie finden immer eine optimale Lösung, die im Allgemeinen möglicherweise nicht einzigartig ist.
Siehe auch
Verweise
- ^ Black, Paul E. (2. Februar 2005). "Gieriger Algorithmus". Wörterbuch von Algorithmen und Datenstrukturen. US Nationales Institut für Standards und Technologie (NIST). Abgerufen 17. August 2012.
- ^ Cormen et al. 2001, CH. 16
- ^ Gutin, Gregory; Yeo, Anders; Zverovich, Alexey (2002). "Reisender Verkäufer sollte nicht gierig sein: Dominanzanalyse der heuristischen Gier-Typen für den TSP". Diskrete angewandte Mathematik. 117 (1–3): 81–86. doi:10.1016/s0166-218x (01) 00195-0.
- ^ Feige 1998
- ^ Papadimitriou & Steiglitz 1998
- ^ Nemhauser, Wolsey & Fisher 1978
- ^ Buchbinder et al. 2014
- ^ Krause & Golovin 2014
- ^ "Vorlesung 5: Einführung in Annäherungsalgorithmen" (PDF). Erweiterte Algorithmen (2IL45) - Kursnotizen. Tu Eindhoven.
Quellen
- Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001). "16 gierige Algorithmen". Einführung in Algorithmen. MIT Press. S. 370–. ISBN 978-0-262-03293-3.
- Gutin, Gregory; Yeo, Anders; Zverovich, Alexey (2002). "Reisender Verkäufer sollte nicht gierig sein: Dominanzanalyse der heuristischen Gier-Typen für den TSP". Diskrete angewandte Mathematik. 117 (1–3): 81–86. doi:10.1016/s0166-218x (01) 00195-0.
- Bang-Jensen, Jørgen; Gutin, Gregory; Yeo, Anders (2004). "Wenn der gierige Algorithmus fehlschlägt". Diskrete Optimierung. 1 (2): 121–127. doi:10.1016/j.disopt.2004.03.007.
- Bendall, Gareth; Margot, François (2006). "Gieriger Widerstand kombinatorischer Probleme". Diskrete Optimierung. 3 (4): 288–298. doi:10.1016/j.disopt.2006.03.001.
- Feige, U. (1998). "Ein Schwellenwert von Ln N für die approximierende festgelegte Abdeckung" (PDF). Journal of the ACM. 45 (4): 634–652. doi:10.1145/285055.285059. S2CID 52827488.
- Nemhauser, G.; Wolsey, L. A.; Fisher, M.L. (1978). "Eine Analyse der Näherungen zur Maximierung der Funktionen der submodularen Menge - i". Mathematische Programmierung. 14 (1): 265–294. doi:10.1007/bf01588971. S2CID 206800425.
- Buchbinder, NIV; Feldman, Moran; Naor, Joseph (Seffi); Schwartz, Roy (2014). "Submodularmaximierung mit Kardinalitätsbeschränkungen" (PDF). Verfahren des fünfundzwanzigsten ACM-SIAM-Symposiums über diskrete Algorithmen. Gesellschaft für industrielle und angewandte Mathematik. doi:10.1137/1.9781611973402.106. ISBN 978-1-61197-340-2.
- Krause, a.; Golovin, D. (2014). "Maximierung der Submodularfunktion". In Bordeaux, L.; Hamadi, Y.; Kohli, P. (Hrsg.). Traktabilität: Praktische Ansätze für harte Probleme. Cambridge University Press. S. 71–104. doi:10.1017/CBO9781139177801.004. ISBN 9781139177801.
Externe Links
- "Gieriger Algorithmus", Enzyklopädie der Mathematik, EMS Press, 2001 [1994]
- Geschenk, Noah. "Python Greedy Coin Beispiel".