Grundlagen: Kombinatorische Explosion Was unterscheidet schwierige von leichten Problemen? Melanie Herzog∗ Wolfgang Ferdinand Riedl† Lehrstuhl M9 für Angewandte Geometrie und Diskrete Mathematik Technische Universität München 1 Einführung In der Mathematik wird häug von Problemen gesprochen. Diese haben eine bestimmte Form: einfach ausgedrückt besteht ein Problem aus Eingabedaten und einer Aufgabe (d. h. einer Ausgabe, welche berechnet werden soll). Dies könnte zum Beispiel sein, aus einer Menge von gegebenen Zahlen die Gröÿte zu nde: Beispiel 1.1 (Gröÿte Zahl Problem): Eingabe: n Ausgabe: Die Gröÿte der Zahlen x1 , . . . , x n n Zahlen. Ein anderes Beispiel könnte es sein, die beiden Zahlen zu nden, welche die kleinste Dierenz haben: Beispiel 1.2 (Kleinste Differenz Problem): Eingabe: n Ausgabe: Die beiden Zahlen mit der kleinsten Dierenz. Um das Zahlen x1 , . . . , x n Kleinste Differenz Problem zu lösen, muss man jedes Zahlenpaar einmal be- trachten. Dabei berechnet man die Dierenz der beiden Zahlen und vergleicht sie mit der bisher kleinsten Dierenz (die man sich gespeichert hat). Solch grundlegende Operationen (wie Addition/Subtraktion/Multiplikation/Division oder Vergleich zweier Werte) werden in der Mathematik als ein Schritt gezählt. Dementsprechend hat man hier für jedes Zahlenpaar zwei Schritte, insgesamt also 2n(n − 1)/2 − 1 = n(n − 1) − 1 Schritte (den ersten Vergleich kann man sich ja sparen). Bei fünf Zahlen sind das also 19 Schritte, bei zehn Zahlen 89 und bei 20 Zahlen 379 Schritte. In der Mathematik werden Probleme nun in einfache und schwere Probleme unterteilt. Der Unterschied wird in den folgenden zwei Abschnitten erklärt. 2 Einfache Probleme Mathematisch einfach sind Probleme, welche sich in kurzer Zeit lösen lassen. Natürlich hängt die benötigte Zeit immer von den Eingabedaten ab. Wenn wir beispielsweise 20 Zahlen gegeben haben brauchen wir länger als wenn wir nur 5 Zahlen bekommen. Deshalb wird die Laufzeit immer in Abhängigkeit von der Eingabe angegeben. In Beispiel 1.2 haben wir beispielsweise festgestellt, dass wir ∗ † n(n − 1) − 1 [email protected] [email protected] 1 Schritte zur Lösung brauchen. Denition 2.1 (Mathematisch einfache Probleme): Ein Problem wird einfach genannt, wenn die zur Lösung nötige Anzahl von Schritten ein Polynom der Eingabe ist. Die beiden oben genannten Probleme sind demnach einfach. Das schöne an solchen Problemen ist, dass sie sich sehr schnell und ezient lösen lassen. In der Mathematik wird die Menge dieser Probleme als die Komplexitätsklasse P bezeichnet. 3 Schwierige Probleme Dies ist bei mathematisch schwierigen Problemen vermutlich anders. Vermutlich deshalb, weil noch nicht bewiesen ist, dass es Probleme gibt, die nicht einfach sind. Es könnte durchaus sein, dass sich auch alle Probleme einfach lösen lassen und man lediglich noch nicht weiÿ, mit welcher Methode. Ein Phänomen, das häug bei mathematisch schwierigen Problemen auftritt ist das der kombinatorischen Explosion. Dies kann zum Beispiel bei folgendem Problem beobachtet werden: Beispiel 3.1 (Teilmengen Problem): Eingabe: n Ausgabe: Eine Teilmenge der Zahlen x1 , . . . , x n n Zahlen, welche eine bestimmte Eigenschaft erfüllt. Die Schwierigkeit des Teilmengen Problems kommt daher, dass es sehr viele Teilmengen n Zahlen gibt es 2n Teilmengen, bei fünf Zahlen also 25 = 32, bei 10 Zahlen schon = 1024 und bei 20 Zahlen sind es sogar mehr als eine Million Teilmengen. Wenn wir gibt. Für 210 also keine bessere Idee haben, müssen wir im schlimmsten Fall jede einzelne Teilmengen anschauen und überprüfen, ob sie die gewünschte Eigenschaft hat. Die Anzahl der Schritte steigt dabei sehr schnell, sehr viel schneller als beim Kleinste Differenz Problem, wie man auch in Tabelle 1 sehen kann. Kleinste Differenz Problem n 5 Teilmengen Problem Schritte Zeit Schritte Zeit 19 19ns 89ns 0, 4µs 2, 4µs 3, 6µs 9, 9µs 0, 2ms 32 32ns 1, 0µs 1, 0ms 312h ∼ 73 Jahre ∼ 40 · 1012 Jahre ∼ 10134 Jahre 10 89 20 379 50 2449 61 3559 100 9899 500 244999 1024 1048576 1125899906842624 ∼ 2, 30584 · 1018 ∼ 1, 26765 · 1030 ∼ 3, 27339 · 10150 Tabelle 1: Anzahl nötiger Schritte und Rechenzeit auf einem Computer (bei 109 Schritten pro Sekunde, was einem Computer mit 1GHz Single-Core Prozessor entspricht) Tabelle 1 zeigt auch, dass sich mathematisch einfache Probleme selbst bei groÿen Eingaben mit einem Computer noch schnell ausrechnen lassen, während das Lösen von mathematisch schwierigen Problemen bei groÿen Problemen viele Menschenleben dauert zumindest solange man keine Methode kennt um auch diese Probleme schnell lösen zu können. So ist 2 das Teilmengen Problem für 50 Zahlen noch in 13 Tagen lösbar; bei 61 Zahlen braucht man schon Menschenleben; für 100 Zahlen wären schon 1012 Jahre nötig (was der Anzahl Sterne in der Andromeda Galaxie entspricht) und für 500 Zahlen benötigt man mehr Jahre als es Atome im Universum gibt. Ein weiteres Problem, welchem wir noch häuger begegnen werden, ist das Problem: Beispiel 3.2 (Anordnungen Anordnungen Problem): n Elementen x1 , x2 , . . . , xn n Elementen Eingabe: Eine Menge von Ausgabe: Wie viele verschiedene Anordnungen der gibt es? Diese verschiedenen Anordnungen werden auch Permutationen der Elemente genannt. Für n Elemente gibt es n · (n − 1) · . . . · 2 · 1 verschiedene Anordnungen. Hierfür wurde eine besondere Schreibweise eingeführt (genannt n Fakultät): n · (n − 1) · . . . · 2 · 1 = n! Ihre Anzahl steigt sogar noch stärker als die Anzahl aller Teilmengen (siehe Tabelle 2). Das heiÿt auch das Testen aller verschiedenen Permutationen (zum Beispiel auf eine bestimmte Eigenschaft) ist ein schweres Problem. Anordnungen Problem n Schritte Zeit 5 120 10 3628800 20 ∼ 2, 4329 · 1018 ∼ 3, 0414 · 1064 ∼ 5, 0758 · 1083 ∼ 9, 3326 · 10157 ∼ 1, 2201 · 101134 0, 1µs 3, 6ms ∼ 77 Jahre ∼ 9 · 1047 Jahre ∼ 2 · 1067 Jahre ∼ 10141 Jahre ∼ 101117 Jahre 50 61 100 500 Tabelle 2: Anzahl nötiger Schritte und Rechenzeit auf einem Computer (bei 109 Schritten pro Sekunde, was einem Computer mit 1GHz Single-Core Prozessor entspricht) Bemerkung 3.3 (Kombinatorische Explosion): Das Phänomen, dass die Anzahl von verschiedenen Anordnungen oder Kombinationen von Elementen sehr schnell extrem groÿ wird (geradezu explodiert), wird häug auch Kombinatorische Explosion genannt. Um zu zeigen, dass ein Problem schwierig ist, sagt man häug, dass es mindestens so schwierig wie ein anderes Problem ist. Das heiÿt, wenn es schnell gelöst werden kann, dann können auch andere schwierige Probleme schnell gelöst werden. Dies kann man gut an den folgenden Beispielproblemen der Graphentheorie sehen. In ihnen wird gefragt, ob in einem Graphen ein Pfad mit einer bestimmten Eigenschaft existiert und ob Pfade einer bestimmten Mindestlänge existieren. Beispiel 3.4 (Hamilton Pfad Problem): G = (V, E) Ein Graph Ausgabe: Gibt es in diesem Graphen einen Hamilton Pfad von einen Pfad, der von s und zwei Knoten s 6= t ∈ V Eingabe: nach t 3 s nach t geht und alle Knoten besucht)? (d. h. Beispiel 3.5 (Längster Pfad Problem): G = (V, E), Ein Graph Ausgabe: Gibt es in diesem Graphen einen Pfad von K zwei Knoten s 6= t ∈ V und eine Zahl K s nach t, der mindestens Eingabe: Kanten benutzt? Hamilton Pfad Problem schwierig zu lösen ist. Dann können wir auch sagen, dass das Längster Pfad Problem schwierig ist. Wenn es nämlich einfach wäre, dann könnten wir mit seiner Hilfe auch das Hamilton Pfad Problem schnell lösen, weshalb es nicht mehr schwierig wäre. Wie können wir aber das Angenommen wir wissen, dass das zweite Problem zu Lösung des ersten benutzen? Im ersten Problem suchen wir einen Hamilton Pfad, d. h. einen Pfad, der alle Knoten besucht. Dieser Pfad muss dann |V | − 1 Kanten benutzen. Um zu testen, ob es einen solchen Pfad gibt, können wir also einfach mit Hilfe des fragen, ob es einen Pfad mit mindestens K = |V | − 1 Längster Pfad Problems Kanten gibt. Gibt es Ja zurück, wissen wir, dass dieser Pfad ein Hamilton Pfad sein muss. Andernfalls wissen wir, dass kein Hamilton Pfad existieren kann. Somit können wir das zur Lösung des Hamilton Pfad Problems nutzen. Längster Pfad Problem Literatur [1] Ravindra K. Ahuja, Thomas L. Magnanti und James B. Orlin. Network ows. Theory, algorithms, and applications. Englewood Clis, NJ: Prentice Hall Inc., 1993, S. xvi+846. isbn: 0-13-617549-X. [2] Ingo Wegener. Complexity theory. Exploring the limits of ecient algorithms, Translated from the German by Randall Pruim. Berlin: Springer-Verlag, 2005, S. xii+308. isbn: 978-3-540-21045-0; 3-540-21045-8. 4