Graphen von Funktionen, die häufig bei der Analyse von Algorithmen verwendet werden , zeigen die Anzahl der Operationen N als Ergebnis der Eingabegröße n für jede Funktion.

In der theoretischen Informatik bezeichnet die Zeitkomplexität die Rechenkomplexität , die angibt, wie viel Zeit ein Algorithmus zur Ausführung benötigt. Die Zeitkomplexität wird üblicherweise durch Zählen der vom Algorithmus ausgeführten Elementaroperationen abgeschätzt, wobei angenommen wird, dass jede Elementaroperation eine feste Zeit benötigt. Somit besteht ein konstanter Zusammenhang zwischen der benötigten Zeit und der Anzahl der vom Algorithmus ausgeführten Elementaroperationen .

Da die Laufzeit eines Algorithmus bei Eingaben gleicher Größe variieren kann, betrachtet man üblicherweise die Worst-Case-Zeitkomplexität , also die maximale Laufzeit für Eingaben einer gegebenen Größe. Weniger gebräuchlich und meist explizit angegeben ist die Average-Case-Komplexität , die den Mittelwert der Laufzeit für Eingaben einer gegebenen Größe darstellt (dies ist sinnvoll, da es nur eine endliche Anzahl möglicher Eingaben einer gegebenen Größe gibt). In beiden Fällen wird die Zeitkomplexität im Allgemeinen als Funktion der Eingabegröße ausgedrückt. [ 1 ] : 226 Da diese Funktion im Allgemeinen schwer exakt zu berechnen ist und die Laufzeit für kleine Eingaben meist keine Rolle spielt, konzentriert man sich üblicherweise auf das Verhalten der Komplexität bei zunehmender Eingabegröße – also auf das asymptotische Verhalten der Komplexität. Daher wird die Zeitkomplexität üblicherweise in der O-Notation ausgedrückt , typischerweise O(n ), O( n), O(n ) usw., wobei n die Größe in Bits ist, die zur Darstellung der Eingabe benötigt werden.

Die Komplexität von Algorithmen wird anhand der Art der in der O-Notation verwendeten Funktion klassifiziert. Beispielsweise ist ein Algorithmus mit der Zeitkomplexität O(n) ein linearer Algorithmus , und ein Algorithmus mit der Zeitkomplexität O(n) für eine bestimmte Konstante ist ein polynomieller Algorithmus .

Tabelle gängiger Zeitkomplexitäten

Die folgende Tabelle fasst einige Klassen häufig auftretender Zeitkomplexitäten zusammen. In der Tabelle bedeutet poly( x ) = x O (1) , d.h. Polynom in  x .

NameKomplexitätsklasseZeitkomplexität ( O ( n ) )Beispiele für LaufzeitenBeispielalgorithmen
konstante Zeit10Den Medianwert in einem sortierten Zahlenarray ermitteln . Berechnung von (−1) n .
inverse Ackermann -ZeitAmortisierte Zeit pro Operation unter Verwendung eines disjunkten Satzes
iterierte logarithmische ZeitVerteilte Färbung von Zyklen
log-logarithmischAmortisierte Zeit pro Operation unter Verwendung einer Warteschlange mit begrenzter Priorität [ 2 ]
logarithmische ZeitDLOGTIME,Binärsuche
polylogarithmische Zeit
BruchteilWo,Bereichssuche in einem k -d-Baum
lineare ZeitN ,Das kleinste oder größte Element in einem unsortierten Array finden . Kadanes Algorithmus . Lineare Suche .
"n log-star n" ZeitSeidels Polygon -Triangulationsalgorithmus .
linearithmische Zeit,Schnellstmögliche Vergleichssortierung . Schnelle Fourier-Transformation .
quasilineare ZeitMehrpunkt-Polynomauswertung
quadratische ZeitBubblesort . Insertionsort . Direkte Faltung .
KubikzeitNaive Multiplikation zweier Matrizen. Berechnung der partiellen Korrelation .
PolynomzeitP,Karmarkars Algorithmus für lineare Programmierung . AKS-Primzahltest [ 3 ] [ 4 ]
quasi-polynomiale ZeitQP,Bekanntester O ( log₂n ) -Approximationsalgorithmus für das gerichtete Steinerbaumproblem , bekanntester Paritätsspiellöser [ 5 ] , bekanntester Graphisomorphiealgorithmus
subexponentielle Zeit (erste Definition)SUBEXPfür alleEnthält BPP , es sei denn, EXPTIME (siehe unten) entspricht MA . [ 6 ]
subexponentielle Zeit (zweite Definition)Bester klassischer Algorithmus zur Faktorisierung ganzer Zahlen

ehemals bester Algorithmus für Graphisomorphie

exponentielle Zeit (mit linearem Exponenten)E,Lösung des Problems des Handlungsreisenden mithilfe dynamischer Programmierung
FaktorzeitLösung des Problems des Handlungsreisenden mittels Brute-Force-Suche
exponentielle ZeitEXPTIME,Lösung der Matrizenkettenmultiplikation mittels Brute-Force-Suche . Finden einer Gewinnstrategie im Schach , Dame oder Go mit der japanischen Ko-Regel auf einem Brett.
doppelt exponentielle Zeit2-EXPTIMEDie Wahrheit einer gegebenen Aussage in der Presburger-Arithmetik bestimmen

Ein Algorithmus wird als zeitkonstant (oft einfach als „ Zeit“ dargestellt) bezeichnet, wenn seine Komplexitätsfunktion durch einen Wert beschränkt ist, der sich nicht mit der Größe der Eingabe ändert. Dies bedeutet, dass die Ausführungszeit unabhängig von der verarbeiteten Datenmenge konstant bleibt. Beispielsweise ist der Zugriff auf ein bestimmtes Element in einem Array eine zeitkonstant zeitbasierte Operation, da nur ein einziger Vorgang erforderlich ist, um dieses Element zu finden.

Im Gegensatz dazu ist die Bestimmung des Minimalwerts in einem unsortierten Array nicht in konstanter Zeit zu bewältigen; sie erfordert die Untersuchung jedes einzelnen Elements , was zu einer linearen Zeitkomplexität von O(n²) führt . Wenn die Anzahl der Elemente jedoch bekannt und festgelegt ist, können bestimmte Aufgaben dennoch als zeitkonstant betrachtet werden.

Wichtig ist, dass der Begriff „konstante Laufzeit“ nicht bedeutet, dass die Laufzeit völlig unabhängig von der Problemgröße sein muss; vielmehr sollte sie unabhängig von der Eingabegröße eine konsistente Obergrenze aufweisen. Beispielsweise wird eine Aufgabe, bei der die Werte von a und b vertauscht werden , um sicherzustellen, dass eine bestimmte Bedingung erfüllt ist, als konstant zeitlich klassifiziert, selbst wenn die Ausführungszeit je nach Erfüllung dieser Bedingung variieren kann. Entscheidend ist, dass eine Konstante t existiert , sodass die benötigte Zeit unabhängig von den Eingabewerten niemals t überschreitet.

Algorithmen mit konstanter Laufzeit sind insbesondere in Bereichen wie der Kryptographie von Bedeutung, wo Timing-Angriffe Schwankungen in der Ausführungszeit ausnutzen können. Durch die Entwicklung von Algorithmen mit konstanter Laufzeit können Entwickler die Sicherheit erhöhen und die Vorhersagbarkeit der Leistung gewährleisten. Dies macht die Algorithmen zu einem grundlegenden Aspekt der Softwareentwicklung.

Logarithmische Zeit

Ein Algorithmus hat eine logarithmische Laufzeit, wenn . Da und durch einen konstanten Multiplikator verknüpft sind und dieser Multiplikator für die Big-O-Klassifizierung irrelevant ist, wird für Algorithmen mit logarithmischer Laufzeit standardmäßig verwendet, unabhängig von der Basis des Logarithmus im Ausdruck für T.

Algorithmen mit logarithmischer Laufzeit treten häufig bei Operationen auf Binärbäumen oder bei der Verwendung der binären Suche auf .

Ein Algorithmus gilt als hocheffizient, wenn das Verhältnis der Anzahl der Operationen zur Größe der Eingabe mit zunehmendem n sinkt und gegen null strebt . Ein Algorithmus, der auf alle Elemente seiner Eingabe zugreifen muss, kann keine logarithmische Laufzeit haben, da die Zeit zum Einlesen einer Eingabe der Größe n in der Größenordnung von n liegt .

Ein Beispiel für logarithmische Laufzeit ist die Wörterbuchsuche. Betrachten wir ein Wörterbuch D mit n alphabetisch sortierten Einträgen . Wir nehmen an, dass für alle n ≥ n der k -te Eintrag in konstanter Zeit abgerufen werden kann . Sei w<sub>k</sub> dieser k -te Eintrag. Unter diesen Voraussetzungen kann geprüft werden, ob ein Wort w im Wörterbuch enthalten ist, und zwar in logarithmischer Zeit: Wir betrachten w = w<sub>k</sub>(n) , wobei w<sub>k</sub> die Abrundungsfunktion bezeichnet . Wenn w = 0 – das heißt, das Wort w befindet sich genau in der Mitte des Wörterbuchs –, ist die Suche abgeschlossen. Andernfalls, wenn w < 0 – das heißt, wenn das Wort w alphabetisch vor dem mittleren Wort des gesamten Wörterbuchs steht –, setzen wir die Suche in der linken (also früheren) Hälfte des Wörterbuchs fort und wiederholen dies, bis das gesuchte Wort gefunden ist. Steht es hingegen nach dem mittleren Wort, verfahren wir analog mit der rechten Hälfte des Wörterbuchs. Dieser Algorithmus ähnelt der Methode, die häufig zum Auffinden eines Eintrags in einem gedruckten Wörterbuch verwendet wird. Folglich verringert sich der Suchraum innerhalb des Wörterbuchs, je näher sich der Algorithmus dem Zielwort nähert.

Polylogarithmische Zeit

Ein Algorithmus hat eine polylogarithmische Laufzeit , wenn seine Laufzeit für eine Konstante k gleich ist . Eine andere Schreibweise dafür ist .

Beispielsweise kann die Ordnung von Matrixketten auf einer parallelen Random-Access-Maschine in polylogarithmischer Zeit gelöst werden [ 7 ] , und die Planarität eines Graphen kann vollständig dynamisch in der Zeit pro Einfüge-/Löschoperation bestimmt werden [ 8 ] .

Sublineare Zeit

Ein Algorithmus läuft in sublinearer Zeit (oft auch als sublineare Zeit bezeichnet ), wenn . Dies schließt insbesondere Algorithmen mit den oben definierten Zeitkomplexitäten ein.

Der Begriff „sublinearer Zeitalgorithmus“ bezeichnet üblicherweise randomisierte Algorithmen, die einen kleinen Teil ihrer Eingaben als Stichprobe verwenden und diese effizient verarbeiten, um näherungsweise Eigenschaften der gesamten Instanz abzuleiten. [ 9 ] Diese Art von sublinearem Zeitalgorithmus ist eng mit Eigenschaftstests und Statistik verwandt .

Weitere Anwendungsfälle, in denen Algorithmen in sublinearer Zeit ausgeführt werden können, sind:

  • Parallele Algorithmen mit linearem oder größerem Gesamtaufwand ( wodurch sie die gesamte Eingabe lesen können), aber sublinearer Tiefe .
  • Algorithmen, die garantierte Annahmen über die Eingabestruktur treffen. Ein wichtiges Beispiel sind Operationen auf Datenstrukturen , z. B. die binäre Suche in einem sortierten Array.
  • Algorithmen, die nach lokalen Strukturen in der Eingabe suchen, beispielsweise nach einem lokalen Minimum in einem eindimensionalen Array (was  mit einer Variante der binären Suche in O(n²) Zeit gelöst werden kann), sind eng mit dem Konzept der lokalen Berechnungsalgorithmen (LCA) verbunden. Hierbei erhält der Algorithmus eine große Eingabe und fragt lokale Informationen über eine gültige große Ausgabe ab. [ 10 ]

Lineare Zeit

Ein Algorithmus hat eine lineare Laufzeit (oder O(n)), wenn seine Zeitkomplexität O(n) beträgt . Anschaulich bedeutet dies, dass die Laufzeit höchstens linear mit der Größe der Eingabe ansteigt. Genauer gesagt bedeutet dies, dass es eine Konstante c gibt , sodass die Laufzeit für jede Eingabe der Größe n höchstens O(n) beträgt . Beispielsweise benötigt eine Prozedur, die alle Elemente einer Liste addiert, eine Laufzeit proportional zur Länge der Liste, wenn die Additionszeit konstant oder zumindest durch eine Konstante beschränkt ist.

Lineare Laufzeit ist die bestmögliche Zeitkomplexität, wenn ein Algorithmus seine gesamte Eingabe sequenziell einlesen muss. Daher wurde viel Forschung in die Entwicklung von Algorithmen mit linearer oder zumindest nahezu linearer Laufzeit investiert. Diese Forschung umfasst sowohl Software- als auch Hardwaremethoden. Verschiedene Hardwaretechnologien nutzen Parallelverarbeitung , um dies zu ermöglichen. Ein Beispiel hierfür ist inhaltsadressierbarer Speicher (CAM ). Dieses Konzept der linearen Laufzeit findet Anwendung in String-Matching-Algorithmen wie dem Boyer-Moore-Algorithmus und dem Ukkonen-Algorithmus .

Quasilineare Zeit

Ein Algorithmus läuft in quasilinearer Zeit (auch als log-lineare Zeit bezeichnet ), wenn für eine positive Konstante k gilt ; [ 11 ] linearithmische Zeit ist der Fall . [ 12 ] In der Soft-O-Notation sind diese Algorithmen gegeben durch . Quasilineare Zeitalgorithmen sind auch für jede Konstante gegeben und laufen daher schneller als jeder Polynomzeitalgorithmus, dessen Zeitschranke einen Term für jedes enthält .

Zu den Algorithmen, die in quasilinearer Zeit laufen, gehören:

In vielen Fällen entspricht die Laufzeit einfach der n -fachen Ausführung einer Operation (zur Notation siehe Big-O-Notation § Familie der Bachmann-Landau-Notationen ). Beispielsweise erzeugt der Binärbaumsortieralgorithmus einen Binärbaum , indem er jedes Element des n -gliedrigen Arrays nacheinander einfügt. Da die Einfügeoperation in einem selbstbalancierenden Binärbaum O( n) benötigt , hat der gesamte Algorithmus O(n²) Zeit.

Vergleichssortierverfahren benötigen im schlimmsten Fall mindestens Vergleiche , da nach der Stirling-Approximation gilt . Sie entstehen auch häufig aus der Rekursionsformel .

Subquadratische Zeit

Ein Algorithmus heißt subquadratisch, wenn .

Beispielsweise haben einfache, vergleichsbasierte Sortieralgorithmen eine quadratische Laufzeit (z. B. Insertion Sort ), während fortgeschrittenere Algorithmen subquadratisch sind (z. B. Shell Sort ). Kein universeller Sortieralgorithmus hat eine lineare Laufzeit, aber der Übergang von quadratischer zu subquadratischer Laufzeit ist von großer praktischer Bedeutung.

Polynomzeit

An algorithm is said to be of polynomial time if its running time is upper bounded by a polynomial expression in the size of the input for the algorithm, that is, T(n) = O(nk) for some positive constant k.[1][13]Problems for which a deterministic polynomial-time algorithm exists belong to the complexity classP, which is central in the field of computational complexity theory. Cobham's thesis states that polynomial time is a synonym for "tractable", "feasible", "efficient", or "fast".[14]

Some examples of polynomial-time algorithms:

  • The selection sort sorting algorithm on n integers performs operations for some constant A. Thus it runs in time and is a polynomial-time algorithm.
  • All the basic arithmetic operations (addition, subtraction, multiplication, division, and comparison) can be done in polynomial time.
  • Maximum matchings in graphs can be found in polynomial time. In some contexts, especially in optimization, one differentiates between strongly polynomial time and weakly polynomial time algorithms.

These two concepts are only relevant if the inputs to the algorithms consist of integers.

Complexity classes

The concept of polynomial time leads to several complexity classes in computational complexity theory. Some important classes defined using polynomial time are the following.

P ist die kleinste Zeitkomplexitätsklasse auf einer deterministischen Maschine, die gegenüber Änderungen des Maschinenmodells robust ist . (Beispielsweise kann der Wechsel von einer Einband-Turingmaschine zu einer Mehrbandmaschine zu einer quadratischen Beschleunigung führen, aber jeder Algorithmus, der unter einem Modell in Polynomialzeit läuft, tut dies auch unter dem anderen.) Jede abstrakte Maschine besitzt eine Komplexitätsklasse, die den Problemen entspricht, die auf dieser Maschine in Polynomialzeit gelöst werden können.

Superpolynomiale Zeit

Ein Algorithmus hat eine superpolynomielle Laufzeit , wenn T ( n ) nicht durch ein Polynom nach oben beschränkt ist; das heißt, wenn ⁠ ⁠ für jede positive ganze Zahl c gilt .

Ein Algorithmus, der beispielsweise 2 n Schritte lang auf einer Eingabe der Größe n ausgeführt wird , benötigt superpolynomielle Zeit (genauer: exponentielle Zeit).

Ein Algorithmus mit exponentiellem Ressourcenverbrauch ist offensichtlich superpolynomiell, manche Algorithmen hingegen nur schwach superpolynomiell. Beispielsweise benötigt der Adleman-Pomerance-Rumely-Primzahltest für n- Bit-Eingaben eine Laufzeit von n O (log log n ) . Diese Laufzeit wächst für ausreichend große n schneller als die jedes Polynoms , doch die Eingabegröße muss unpraktisch groß werden, bevor sie nicht mehr von einem Polynom kleinen Grades dominiert werden kann.

Ein Algorithmus mit superpolynomieller Laufzeit liegt außerhalb der Komplexitätsklasse P. Cobhams These besagt , dass solche Algorithmen unpraktisch sind, und in vielen Fällen trifft dies zu. Da das P-vs.-NP-Problem ungelöst ist, ist unbekannt, ob NP-vollständige Probleme superpolynomielle Laufzeit benötigen.

Quasi-polynomiale Zeit

Quasi-polynomiale Algorithmen sind Algorithmen, deren Laufzeit quasi-polynomiales Wachstum aufweist . Dieses Verhalten ist zwar langsamer als polynomiale Laufzeit, aber deutlich schneller als exponentielle Laufzeit . Die Laufzeit im schlechtesten Fall eines quasi-polynomialen Algorithmus beträgt für ein festes n ≥ 0. Für n ≥ 0 ergibt sich polynomiale Laufzeit, für n ≥ 0 sublineare Laufzeit.

Es gibt Probleme, für die wir quasi-polynomiale Algorithmen kennen, aber keine polynomialen Algorithmen. Solche Probleme treten bei Approximationsalgorithmen auf; ein bekanntes Beispiel ist das Problem des gerichteten Steinerbaums , für das ein quasi-polynomialer Approximationsalgorithmus mit einem Approximationsfaktor von O ( n ) (wobei n die Anzahl der Knoten ist) existiert. Der Nachweis der Existenz eines solchen polynomialen Algorithmus ist jedoch ein offenes Problem.

Zu den anderen Rechenproblemen mit quasi-polynomiellen Lösungen, aber ohne bekannte polynomielle Lösung, gehört das Problem der eingepflanzten Clique, bei dem es darum geht, eine große Clique in der Vereinigung einer Clique und eines Zufallsgraphen zu finden . Obwohl es quasi-polynomiell lösbar ist, wurde vermutet, dass das Problem der eingepflanzten Clique keine polynomielle Lösung besitzt. Diese Vermutung wurde als Annahme über die Rechenschwierigkeit verwendet , um die Schwierigkeit verschiedener anderer Probleme in der algorithmischen Spieltheorie , im Eigenschaftstest und im maschinellen Lernen zu beweisen . [ 15 ]

Die Komplexitätsklasse QP umfasst alle Probleme, für die es Algorithmen mit quasi-polynomieller Laufzeit gibt. Sie kann wie folgt in Bezug auf DTIME definiert werden . [ 16 ]

Bezug zu NP-vollständigen Problemen

In der Komplexitätstheorie stellt das ungelöste P-versus-NP- Problem die Frage, ob alle Probleme in NP polynomiale Algorithmen besitzen. Alle bekannten Algorithmen für NP-vollständige Probleme wie 3SAT usw. benötigen exponentielle Zeit. Tatsächlich wird für viele natürliche NP-vollständige Probleme vermutet, dass sie keine subexponentiellen Algorithmen besitzen. „Subexponentielle Zeit“ ist hier im Sinne der zweiten unten dargestellten Definition zu verstehen. (Andererseits sind viele Graphprobleme, die auf natürliche Weise durch Adjazenzmatrizen dargestellt werden, in subexponentieller Zeit lösbar, einfach weil die Größe der Eingabe dem Quadrat der Anzahl der Knoten entspricht.) Diese Vermutung (für das k-SAT-Problem) ist als Exponentialzeithypothese bekannt . [ 17 ] Da vermutet wird, dass NP-vollständige Probleme keine quasi-polynomiellen Algorithmen besitzen, basieren einige Unapproximierbarkeitsresultate im Bereich der Approximationsalgorithmen auf dieser Annahme. Siehe beispielsweise die bekannten Unapproximierbarkeitsresultate für das Mengenüberdeckungsproblem .

Subexponentielle Zeit

Der Begriff „subexponentielle Laufzeit“ beschreibt eine Situation, in der die Laufzeit eines Algorithmus zwar schneller wächst als jedes Polynom, aber dennoch deutlich kürzer als eine Exponentialfunktion ist. In diesem Sinne sind Probleme mit subexponentiellen Algorithmen etwas leichter zu handhaben als solche mit ausschließlich exponentiellen Algorithmen. Die genaue Definition von „subexponentiell“ ist nicht allgemein anerkannt [ 18 ] , die beiden gebräuchlichsten Definitionen sind jedoch im Folgenden aufgeführt.

Erste Definition

Ein Problem heißt subexponentiell lösbar, wenn es in Laufzeiten gelöst werden kann, deren Logarithmen kleiner werden als jedes beliebige Polynom. Genauer gesagt, ist ein Problem subexponentiell lösbar, wenn für jedes ε > 0 ein Algorithmus existiert, der das Problem in der Zeit O (2 ^ nε ) löst. Die Menge aller solcher Probleme bildet die Komplexitätsklasse SUBEXP , die sich wie folgt mithilfe von DTIME definieren lässt . [ 6 ] [ 19 ] [ 20 ] [ 21 ]

Dieser Begriff der Subexponentialfunktion ist in Bezug auf ε nicht einheitlich, da ε nicht Teil der Eingabe ist und jedes ε seinen eigenen Algorithmus für das Problem haben kann.

Zweite Definition

Einige Autoren definieren subexponentielle Laufzeit als Laufzeiten in . [ 17 ] [ 22 ] [ 23 ] Diese Definition erlaubt größere Laufzeiten als die erste Definition subexponentieller Laufzeit. Ein Beispiel für einen solchen subexponentiellen Algorithmus ist der bekannteste klassische Algorithmus zur Faktorisierung ganzer Zahlen, das allgemeine Zahlkörpersieb , das in etwa in läuft , wobei die Länge der Eingabe n ist . Ein weiteres Beispiel war das Graphisomorphieproblem , das der beste bekannte Algorithmus von 1982 bis 2016 in löste . Auf der STOC 2016 wurde jedoch ein quasi-polynomialer Algorithmus vorgestellt. [ 24 ]

Es macht einen Unterschied, ob der Algorithmus subexponentiell in der Größe der Instanz, der Anzahl der Knoten oder der Anzahl der Kanten sein darf. In der parametrisierten Komplexität wird dieser Unterschied explizit durch die Betrachtung von Paaren aus Entscheidungsproblemen und Parametern k verdeutlicht . SUBEPT ist die Klasse aller parametrisierten Probleme, die in subexponentieller Zeit in k und polynomiell in der Eingabegröße n laufen : [ 25 ]

Genauer gesagt ist SUBEPT die Klasse aller parametrisierten Probleme, für die es eine berechenbare Funktion mit und einen Algorithmus gibt, der L in der Zeit entscheidet .

Exponentialzeithypothese

Die Hypothese der exponentiellen Laufzeit ( ETH ) besagt, dass das Erfüllbarkeitsproblem 3SAT für Boolesche Formeln in konjunktiver Normalform mit höchstens drei Literalen pro Klausel und n Variablen nicht in 2 <sup>o</sup> ( n ) Zeit gelöst werden kann . Genauer gesagt besagt die Hypothese, dass es eine absolute Konstante c > 0 gibt , sodass 3SAT von keiner deterministischen Turingmaschine in 2 <sup>cn</sup> Zeit entschieden werden kann. Bezeichnet m die Anzahl der Klauseln, ist ETH äquivalent zur Hypothese, dass kSAT für keine ganze Zahl k ≥ 3 in 2<sup> o</sup> ( m ) Zeit gelöst werden kann . [ 26 ] Die Hypothese der exponentiellen Laufzeit impliziert P ≠ NP .

Exponentialzeit

Ein Algorithmus heißt exponentiell , wenn T ( n ) durch 2 <sup>poly( n ) </sup> nach oben beschränkt ist , wobei poly( n ) ein Polynom in n ist . Formaler ausgedrückt: Ein Algorithmus ist exponentiell, wenn T ( n ) durch O (2 <sup>nk </sup> ) für eine Konstante k beschränkt ist . Probleme, die auf einer deterministischen Turingmaschine exponentielle Algorithmen zulassen, bilden die Komplexitätsklasse EXP .

Manchmal wird der Begriff „exponentielle Zeit“ für Algorithmen verwendet, deren Laufzeit T ( n ) = 2<sup> O ( n ) </sup> ist , wobei der Exponent höchstens eine lineare Funktion von n ist . Dies führt zur Komplexitätsklasse E.

Faktorzeit

Ein Algorithmus heißt faktorielle Zeit , wenn T(n) durch die Fakultätsfunktion n! nach oben beschränkt ist . Faktorielle Zeit ist eine Teilmenge der Exponentialzeit (EXP), da für alle n ≥ n gilt: T(n ) ≤ n!. Sie ist jedoch keine Teilmenge von E.

Ein Beispiel für einen Algorithmus mit Fakultätszeit ist Bogosort , ein notorisch ineffizienter Sortieralgorithmus, der auf dem Prinzip von Versuch und Irrtum basiert . Bogosort sortiert eine Liste von n Elementen, indem die Liste so lange wiederholt gemischt wird , bis sie sortiert ist. Im Durchschnitt untersucht jeder Durchlauf des Bogosort-Algorithmus eine der n ! möglichen Anordnungen der n Elemente. Sind die Elemente verschieden, ist nur eine dieser Anordnungen sortiert. Bogosort ist verwandt mit dem Satz vom unendlichen Affen .

Doppelte Exponentialzeit

Ein Algorithmus heißt doppelt exponentiell , wenn T ( n ) nach oben durch 2 ^2 poly( n ) beschränkt ist , wobei poly( n ) ein Polynom in n ist . Solche Algorithmen gehören zur Komplexitätsklasse 2-EXPTIME .

Zu den bekannten Algorithmen mit doppelt exponentieller Laufzeit gehören:

Siehe auch

Referenzen

  1. ^ a b Sipser, Michael (2006). Einführung in die Theorie der Berechenbarkeit . Course Technology Inc. ISBN 0-619-21764-2Die
  2. Mehlhorn , Kurt ; Naher, Stefan (1990). „Beschränkte geordnete Wörterbücher in O (log log N ) Zeit und O ( n ) Speicherplatz“. Information Processing Letters . 35 (4): 183–189 . doi : 10.1016/0020-0190(90)90022-P .
  3. ^ Tao, Terence (2010). „1.11 Der AKS-Primzahltest“ . In: An epsilon of room, II: Pages from year three of a mathematical blog . Graduate Studies in Mathematics. Band 117. Providence, RI: American Mathematical Society. S.  82–86 . doi : 10.1090/gsm/117 . ISBN 978-0-8218-5280-4MR  2780010 .​
  4. Lenstra , H. W. Jr .; Pomerance, Carl (2019). „Primärtests mit Gaußschen Perioden“ (PDF) . Journal of the European Mathematical Society . 21 (4): 1229–1269 . doi : 10.4171/JEMS/861 . hdl : 21.11116 / 0000-0005-717D-0 . MR 3941463. S2CID 127807021 .  
  5. ^ Calude, Cristian S., Jain, Sanjay, Khoussainov, Bakhadyr, Li, Wei und Stephan, Frank (2017). „Entscheidung von Paritätsspielen in quasipolynomialer Zeit“ . Proceedings of the 49th Annual ACM SIGACT Symposium on Theory of Computing . Association for Computing Machinery. S.  252–263 . doi : 10.1145/3055399.3055409 . hdl : 2292/31757 . ISBN 9781450345286. S2CID  30338402 .{{cite book}}: CS1 maint: multiple names: authors list (link)
  6. ^ a b Babai, László ; Fortnow, Lance ; Nisan, N .; Wigderson, Avi (1993). „BPP hat subexponentielle Zeitsimulationen, es sei denn, EXPTIME hat publizierbare Beweise“. Computational Complexity . 3 (4). Berlin, New York: Springer-Verlag : 307–318 . doi : 10.1007/BF01275486 . S2CID 14802332 . 
  7. ^ Bradford, Phillip G.; Rawlins, Gregory JE; Shannon, Gregory E. (1998). „Effiziente Matrixkettenordnung in polylogarithmischer Zeit“. SIAM Journal on Computing . 27 (2): 466–490 . doi : 10.1137/S0097539794270698 . MR 1616556 . 
  8. Holm , Jacob; Rotenberg, Eva (2020). „Vollständig dynamisches Planaritätstesting in polylogarithmischer Zeit“. In: Makarychev, Konstantin; Makarychev, Yury; Tulsiani, Madhur; Kamath, Gautam; Chuzhoy, Julia (Hrsg.). Proceedings of the 52nd Annual ACM SIGACT Symposium on Theory of Computing, STOC 2020, Chicago, IL, USA, 22.–26. Juni 2020. Association for Computing Machinery. S.  167–180 . arXiv : 1911.03449 . doi : 10.1145/3357713.3384249 . ISBN 978-1-4503-6979-4Die
  9. ^ Kumar, Ravi; Rubinfeld, Ronitt (2003). „Sublinear time algorithms“ (PDF) . SIGACT News . 34 (4): 57–67 . doi : 10.1145/954092.954103 . S2CID 65359 . 
  10. ^ Rubinfeld, Ronitt (2019). „Lokale Berechnungsalgorithmen“. Proceedings of the 2019 ACM Symposium on Principles of Distributed Computing . S. 3. doi : 10.1145/3293611.3331587 . ISBN 978-1-4503-6217-7Die
  11. ^ Naik, Ashish V.; Regan, Kenneth W.; Sivakumar, D. (1995). „On quasilinear-time complexity theory“ (PDF) . Theoretical Computer Science . 148 (2): 325–349 . doi : 10.1016/0304-3975(95)00031-Q . MR 1355592 . 
  12. ^ Sedgewick, Robert; Wayne, Kevin (2011). Algorithmen (4. Aufl.). Pearson Education. S. 186.
  13. ^ Papadimitriou, Christos H. (1994). Computational complexity . Reading, Mass.: Addison-Wesley. ISBN 0-201-53082-1Die
  14. ^ Cobham, Alan (1965). „Die intrinsische Berechnungsschwierigkeit von Funktionen“. Proc. Logic, Methodology, and Philosophy of Science II . North Holland.
  15. ^ Braverman, Mark ; Kun-Ko, Young; Rubinstein, Aviad; Weinstein, Omri (2017). „ETH-Härte für den dichtesten k- Teilgraphen mit perfekter Vollständigkeit“. In: Klein, Philip N. (Hrsg.). Proceedings of the Twenty-Eighth Annual ACM-SIAM Symposium on Discrete Algorithms, SODA 2017, Barcelona, ​​Spanien, Hotel Porta Fira, 16.– 19 . Januar . Society for Industrial and Applied Mathematics. S.  1326–1341 . arXiv : 1504.08352 . doi : 10.1137/1.9781611974782.86 . ISBN 978-1-61197-478-2MR  3627815 .​
  16. ^ Komplexitätszoo : Klasse QP: Quasipolynomialzeit
  17. ^ a b Impagliazzo, Russell ; Paturi, Ramamohan (2001). „On the complexity of k -SAT“ (PDF) . Journal of Computer and System Sciences . 62 (2): 367– 375. doi : 10.1006/jcss.2000.1727 . MR 1820597 . 
  18. ^ Aaronson, Scott (5. April 2009). „Ein nicht ganz exponentielles Dilemma“ . Shtetl-Optimized . Abgerufen am 2. Dezember 2009 .
  19. ^ Komplexitätszoo : Klasse SUBEXP: Deterministische subexponentielle Zeit
  20. ^ Moser, P. (2003). „Bairesche Kategorien auf kleinen Komplexitätsklassen“. In: Andrzej Lingas; Bengt J. Nilsson (Hrsg.). Grundlagen der Berechnungstheorie: 14. Internationales Symposium, FCT 2003, Malmö, Schweden, 12.–15. August 2003, Tagungsband . Lecture Notes in Computer Science . Band 2751. Berlin, New York: Springer-Verlag. S.  333–342 . doi : 10.1007/978-3-540-45077-1_31 . ISBN 978-3-540-40543-6ISSN  0302-9743 .​
  21. ^ Miltersen, PB (2001). „Derandomizing Complexity Classes“. Handbook of Randomized Computing . Combinatorial Optimization. Vol. 9. Kluwer Academic Pub. S. 843. doi : 10.1007/978-1-4615-0013-1_19 (inaktiv seit 21. Juli 2025). ISBN 978-1-4613-4886-3Die{{cite book}}: CS1 maint: DOI inactive as of July 2025 (link)
  22. ^ Kuperberg, Greg (2005). „Ein Quantenalgorithmus mit subexponentieller Laufzeit für das Problem der Dieder-Untergruppe“. SIAM Journal on Computing . 35 (1). Philadelphia: 188. arXiv : quant-ph/0302112 . doi : 10.1137/s0097539703436345 . ISSN 1095-7111 . S2CID 15965140 .  
  23. ^ Oded Regev (2004). „Ein subexponentieller Zeitalgorithmus für das Dieder-Versteckte-Untergruppen-Problem mit polynomialem Speicherplatz“. arXiv : quant-ph/0406151v1 .
  24. ^ Grohe, Martin; Neuen, Daniel (2021). „Neuere Fortschritte beim Graphisomorphieproblem“. In: Dabrowski, Konrad K.; Gadouleau, Maximilien; Georgiou, Nicholas; Johnson, Matthew; Mertzios, George B.; Paulusma, Daniël (Hrsg.). Surveys in combinatorics 2021. London Mathematical Society Lecture Note Series. Band 470. Cambridge University Press. S.  187–234 . arXiv : 2011.01366 . ISBN 978-1-009-01888-3MR  4273431 .​
  25. ^ Flum, Jörg; Grohe, Martin (2006). Parametrisierte Komplexitätstheorie . Springer. P. 417. ISBN 978-3-540-29952-3Die
  26. ^ Impagliazzo, R. ; Paturi, R.; Zane, F. (2001). „Welche Probleme haben eine stark exponentielle Komplexität?“ . Journal of Computer and System Sciences . 63 (4): 512– 530. doi : 10.1006/jcss.2001.1774 .
  27. ^ Mayr, Ernst W .; Meyer, Albert R. (1982). „Die Komplexität der Wortprobleme für kommutative Halbgruppen und Polynomideale“ . Advances in Mathematics . 46 (3): 305–329 . doi : 10.1016/0001-8708(82)90048-2 . hdl : 1721.1/149010 . MR 0683204 . 
  28. Davenport , James H.; Heintz , Joos (1988). „Real quantifier elimination is doubly exponential“ . Journal of Symbolic Computation . 5 ( 1–2 ): 29–35 . doi : 10.1016/S0747-7171(88)80004-X . MR 0949111 . 
  29. Collins , George E. (1975). „Quantoreneliminierung für reell abgeschlossene Körper mittels zylindrischer algebraischer Zerlegung“. In: Brakhage, H. (Hrsg.). Automatentheorie und formale Sprachen: 2. GI-Konferenz, Kaiserslautern, 20.–23. Mai 1975. Lecture Notes in Computer Science. Band 33. Springer. S.  134–183 . doi : 10.1007/3-540-07407-4_17 . ISBN 978-3-540-07407-6MR  0403962 .​