Polynomialzeit

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Polynomieller Algorithmus)
Zur Navigation springen Zur Suche springen

In der Komplexitätstheorie bezeichnet man ein Problem als in Polynomialzeit lösbar, wenn es mit einer deterministischen Rechenmaschine in einer Rechenzeit lösbar ist, die mit der Problemgröße nicht stärker als gemäß einer Polynomfunktion wächst.

Die Polynomialzeit gilt als eine Grenze zwischen praktisch lösbaren und praktisch nicht lösbaren Problemen. Der Aufwand für Probleme, die nicht in Polynomialzeit lösbar sind, wächst im Allgemeinen so schnell, dass schon relativ kleine Probleme mit verfügbaren Rechnern nicht in überschaubarer Zeit gelöst werden können. Dieser Sachverhalt ist unabhängig vom technologischen Fortschritt, insoweit er die Geschwindigkeit deterministischer Rechner betrifft. Eine Sonderstellung nehmen Quantencomputer und DNA-Computer ein, da sie bestimmte nichtdeterministische Operationen ermöglichen.[1]

Ob ein gegebenes Problem in Polynomialzeit lösbar ist, ist nicht immer von vornherein klar. So wurde für das Problem, zu entscheiden, ob eine gegebene natürliche Zahl eine Primzahl ist, erst 2002 von Agrawal, Kayal und Saxena ein in Polynomialzeit laufender Algorithmus angegeben (AKS-Primzahltest). Das naive Verfahren, alle möglichen Teiler durchzuprobieren, ist nicht in Polynomialzeit durchführbar.

Formale Definition

[Bearbeiten | Quelltext bearbeiten]

Ein Problem wird in polynomieller Zeit lösbar genannt, wenn es dafür einen Lösungsalgorithmus gibt, dessen benötigte Rechenzeit (z. B. gemessen als Anzahl der Arbeitsschritte einer Turing-Maschine) höchstens polynomiell mit der Größe des Problems (gemessen als Länge der Eingabe für den Lösungsalgorithmus) wächst, wobei die maximale Rechenzeit ist, die der Algorithmus für eine Probleminstanz der Länge benötigt. Es existiert ein Polynom in , das die Rechenzeit nach oben beschränkt: für jedes ist . Anders gesagt: Es gibt eine natürliche Zahl mit gemäß der Landau-Notation. Ein solcher Algorithmus heißt Polynomialzeit-Algorithmus oder polynomieller Algorithmus für das Problem.

Beispiel: Polynomieller Algorithmus

[Bearbeiten | Quelltext bearbeiten]

Ein einfaches Verfahren zum Sortieren eines Arrays ist das fortwährende Finden und nach hinten Schieben des größten der noch unsortierten Elemente (Selectionsort). Der Aufwand dieses Verfahrens ist quadratisch, weil für jedes Element der Eingabe maximal alle anderen Elemente einmal betrachtet werden müssen. Dadurch ergeben sich n+(n-1)+(n-2)... Vergleiche, deren Summe nach dem kleinen Gauß quadratisch in Abhängigkeit von n wächst. Da eine quadratische Abhängigkeit von der Eingabe polynomiell ist, handelt es sich um einen polynomiellen Algorithmus.

Superpolynomialzeit

[Bearbeiten | Quelltext bearbeiten]

Probleme, deren Berechnungszeit mit der Problemgröße stärker als mit einer Polynomfunktion wächst, heißen in Superpolynomialzeit lösbar; ein Beispiel dafür ist exponentielle Zeit, also mit konstantem .

Bezug zu den Komplexitätsklassen

[Bearbeiten | Quelltext bearbeiten]

Die Klasse aller Probleme, die sich auf einer deterministischen sequentiellen Maschine in Polynomialzeit lösen lassen, wird als P (von polynomial) bezeichnet. Die Klasse aller Probleme, die sich von einer nichtdeterministischen Maschine in Polynomialzeit lösen lassen, wird als NP (von nondeterministic-polynomial time) bezeichnet. Es ist klar, dass , also P eine Teilmenge von NP ist. Eine bis heute unbewiesene Vermutung ist, dass beide Klassen echt verschieden sind, dass also gilt. Das P-NP-Problem gilt als wichtigstes offenes Problem der theoretischen Informatik.

Die Polynomialzeit galt bereits in den 1970er Jahren als Grenze zwischen praktisch lösbaren und praktisch unlösbaren Problemen. Diese Abgrenzung ist allerdings für die Praxis nicht trennscharf. Einerseits gibt es auch Methoden mit exponentieller worst-case-Laufzeit, die in der Praxis einsetzbar sind; ein Beispiel hierfür ist der Simplex-Algorithmus. Andererseits wachsen Polynome höheren Grades bereits so schnell, dass viele in Polynomialzeit ablaufende Algorithmen für praktisch vorhandene Problemgrößen dennoch nicht mehr handhabbar sind.

Es spricht jedoch eine Reihe von Gründen für die Beibehaltung der Polynomialzeit als „Grenze der Machbarkeit“. Insbesondere gibt es viele Probleme, für die zunächst nur ein hochgradig polynomielles Verfahren bekannt war (dessen Laufzeit durch ein Polynom hohen Grades begrenzt ist), die aber später auch mit niedrigem polynomiellem Aufwand (etwa vom Grad 2 oder 3) gelöst werden konnten.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Computing exponentially faster using DNA. In: next BIG Future. 1. März 2017, abgerufen am 10. März 2017 (englisch).