Theorie der Informatik, die Probleme nach ihrer inhärenten Schwierigkeit klassifiziert.
Computational Complexity Theory konzentriert sich auf die Klassifizierung von rechnerischen Problemen nach ihrer inhärenten Schwierigkeit und auf das Zusammenfügen dieser Klassen. Ein Rechenproblem ist eine Aufgabe, die von einem Computer gelöst wird. Ein Rechenproblem ist durch mechanische Anwendung von mathematischen Schritten, beispielsweise eines Algorithmus, lösbar.
Ein Problem wird von Natur aus als schwierig angesehen, wenn für seine Lösung unabhängig vom verwendeten Algorithmus erhebliche Ressourcen erforderlich sind. Die Theorie formalisiert diese Intuition, indem sie mathematische Rechenmodelle einführt, um diese Probleme zu untersuchen und ihre rechnerische Komplexität zu quantifizieren, d. H. Die Menge an Ressourcen, die zu ihrer Lösung benötigt werden, wie Zeit und Speicher. Andere Maßeinheiten der Komplexität werden ebenfalls verwendet, wie beispielsweise der Kommunikationsumfang (verwendet in der Kommunikationskomplexität), die Anzahl von Gattern in einer Schaltung (in der Schaltungskomplexität verwendet) und die Anzahl von Prozessoren (in der parallelen Berechnung verwendet). Eine der Aufgaben der Theorie der rechnerischen Komplexität besteht darin, die praktischen Grenzen zu bestimmen, was Computer tun können und was nicht. Das P-versus-NP-Problem, eines der sieben Probleme des Millennium-Preises, widmet sich dem Gebiet der rechnerischen Komplexität. [1]
Eng verwandte Gebiete in der theoretischen Informatik sind die Analyse von Algorithmen und die Berechenbarkeitstheorie. Ein wesentlicher Unterschied zwischen der Analyse von Algorithmen und der rechnerischen Komplexitätstheorie besteht darin, dass die erstere dazu dient, die Menge an Ressourcen zu analysieren, die ein bestimmter Algorithmus benötigt, um ein Problem zu lösen, während die letztere eine allgemeinere Frage zu allen möglichen Algorithmen stellt, für die ein Algorithmus verwendet werden kann Löse das gleiche Problem. Genauer gesagt versucht die Theorie der rechnerischen Komplexität, Probleme zu klassifizieren, die mit entsprechend beschränkten Ressourcen gelöst werden können oder nicht. Das Auferlegen von Beschränkungen für die verfügbaren Ressourcen wiederum unterscheidet die rechnerische Komplexität von der Theorie der Berechenbarkeit: Die letztere Theorie fragt, welche Probleme im Prinzip algorithmisch gelöst werden können.
Computerprobleme [ edit ]
Problemstellungen [ edit ]
A Das Rechenproblem kann als unendliche Sammlung von Instanzen zusammen mit einer Lösung für jede Instanz betrachtet werden. Die Eingabezeichenfolge für ein Rechenproblem wird als Probleminstanz bezeichnet und sollte nicht mit dem Problem selbst verwechselt werden. In der Theorie der rechnerischen Komplexität bezieht sich ein Problem auf die zu lösende abstrakte Frage. Im Gegensatz dazu ist ein Fall dieses Problems eine ziemlich konkrete Äußerung, die als Eingabe für ein Entscheidungsproblem dienen kann. Betrachten Sie beispielsweise das Problem der Primalitätsprüfung. Die Instanz ist eine Zahl (z. B. 15) und die Lösung ist "Ja", wenn die Zahl Primzahl ist und ansonsten "Nein" (in diesem Fall ist 15 keine Primzahl und die Antwort ist "Nein"). Anders ausgedrückt ist die Instanz eine besondere Eingabe für das Problem, und die -Lösung ist die Ausgabe, die der gegebenen Eingabe entspricht.
Um den Unterschied zwischen einem Problem und einer Instanz noch deutlicher hervorzuheben, betrachten Sie die folgende Instanz der Entscheidungsversion des Problems des reisenden Händlers: Gibt es eine Route von höchstens 2000 Kilometern durch alle 15 größten Städte Deutschlands? Die quantitative Antwort auf diese spezielle Probleminstanz ist für die Lösung anderer Fälle der Problematik wenig hilfreich, beispielsweise um eine Rundfahrt durch alle Standorte in Mailand mit einer Gesamtlänge von höchstens 10 km anzufordern. Aus diesem Grund befasst sich die Komplexitätstheorie mit Rechenproblemen und nicht mit bestimmten Problemfällen.
Darstellung von Probleminstanzen [ edit ]
Bei der Betrachtung von Computerproblemen ist eine Probleminstanz eine Zeichenfolge über einem Alphabet. Normalerweise wird das Alphabet als das binäre Alphabet (d. H. Der Satz {0,1}) verstanden, und somit sind die Zeichenfolgen Bitfolgen. Wie in einem realen Computer müssen andere mathematische Objekte als Bitstrings geeignet codiert werden. Zum Beispiel können Ganzzahlen in binärer Notation dargestellt werden, und Graphen können direkt über ihre Adjazenzmatrizen oder durch Codieren ihrer Adjazenzlisten in binär codiert werden.
Auch wenn einige Beweise für komplexitätstheoretische Theoreme regelmäßig eine konkrete Wahl der Eingabecodierung voraussetzen, versucht man, die Diskussion abstrakt genug zu halten, um unabhängig von der Wahl der Codierung zu sein. Dies kann erreicht werden, indem sichergestellt wird, dass verschiedene Repräsentationen effizient ineinander umgewandelt werden können.
Entscheidungsprobleme als formale Sprachen [ edit ]
Entscheidungsprobleme sind eines der zentralen Untersuchungsobjekte der Komplexitätstheorie. Ein Entscheidungsproblem ist eine besondere Art von Rechenproblem, dessen Antwort entweder ja oder nein oder alternativ entweder 1 oder 0 ist. Ein Entscheidungsproblem kann als eine formale Sprache betrachtet werden, wo das Mitglieder der Sprache sind Instanzen, deren Ausgabe ja ist, und die Nichtmitglieder sind die Instanzen, deren Ausgabe nein ist. Das Ziel besteht darin, mit Hilfe eines Algorithmus zu entscheiden, ob eine gegebene Eingabezeichenfolge ein Mitglied der betrachteten formalen Sprache ist. Wenn der Algorithmus, der dieses Problem festlegt, die Antwort zurückgibt yes wird der Algorithmus die Eingabezeichenfolge annehmen, andernfalls wird die Eingabe zurückgewiesen.
Ein Beispiel für ein Entscheidungsproblem ist das folgende. Die Eingabe ist ein beliebiger Graph. Das Problem besteht darin, zu entscheiden, ob der angegebene Graph verbunden ist oder nicht. Die mit diesem Entscheidungsproblem verbundene formale Sprache ist dann die Menge aller verbundenen Graphen. Um eine genaue Definition dieser Sprache zu erhalten, muss entschieden werden, wie Graphen als binäre Zeichenfolgen codiert werden.
Funktionsprobleme [ edit ]
Ein Funktionsproblem ist ein Rechenproblem, bei dem eine einzelne Ausgabe (einer Gesamtfunktion) für jede Eingabe erwartet wird, die Ausgabe jedoch komplexer ist als das eines Entscheidungsproblems - das heißt, die Ausgabe ist nicht nur Ja oder Nein. Zu den bemerkenswerten Beispielen gehören das Problem des reisenden Verkäufers und das Problem der ganzzahligen Faktoren.
Es ist verlockend zu glauben, dass der Begriff der Funktionsprobleme viel reicher ist als der Begriff der Entscheidungsprobleme. Dies ist jedoch nicht wirklich der Fall, da Funktionsprobleme als Entscheidungsprobleme umgeformt werden können. Zum Beispiel kann die Multiplikation von zwei ganzen Zahlen als Satz von Tripeln ausgedrückt werden (19459022] a b c ), so dass die Beziehung a × b = c gilt. Die Entscheidung, ob ein gegebenes Tripel Mitglied dieser Menge ist, entspricht der Lösung des Problems der Multiplikation zweier Zahlen.
Messen der Größe einer Instanz [ edit ]
Um die Schwierigkeit der Lösung eines Rechenproblems zu messen, möchte man vielleicht wissen, wie viel Zeit der beste Algorithmus zur Lösung des Problems benötigt . Die Laufzeit kann jedoch im Allgemeinen von der Instanz abhängen. Insbesondere größere Instanzen erfordern mehr Zeit zum Lösen. Somit wird die Zeit, die zum Lösen eines Problems benötigt wird (oder der erforderliche Platz oder ein beliebiges Maß für die Komplexität) als Funktion der Größe der Instanz berechnet. Dies wird normalerweise als die Größe der Eingabe in Bits angesehen. Die Komplexitätstheorie interessiert sich dafür, wie Algorithmen mit einer Zunahme der Eingabegröße skalieren. Wie viel Zeit benötigt man zum Beispiel, um herauszufinden, ob ein Graph verbunden ist, um ein Problem für einen Graph mit 2 n Knoten zu lösen, verglichen mit der Zeit für einen Graph mit ? n Ecken?
Wenn die Eingangsgröße n ist, kann die Zeit als Funktion von n ausgedrückt werden. Da die Zeit, die für verschiedene Eingaben der gleichen Größe benötigt wird, unterschiedlich sein kann, wird die Zeitkomplexität T ( n ) für den ungünstigsten Fall als die maximale Zeit definiert, die über alle Eingaben der Größe n genommen wird ]. Wenn T ( n ) ein Polynom in n ist, dann wird der Algorithmus als ein Polynomialzeitalgorithmus bezeichnet. Cobhams These argumentiert, dass ein Problem mit einer realisierbaren Menge an Ressourcen gelöst werden kann, wenn es einen Polynomialzeitalgorithmus zulässt.
Maschinenmodelle und Komplexitätsmaße [ edit ]
Turing-Maschine [ edit ]
A Die Turingmaschine ist ein mathematisches Modell einer allgemeinen Rechenmaschine. Es ist ein theoretisches Gerät, das Symbole auf einem Bandstreifen manipuliert. Turingmaschinen sind nicht als praktische Computertechnologie gedacht, sondern eher als allgemeines Modell einer Computermaschine - vom fortgeschrittenen Supercomputer bis zum Mathematiker mit Bleistift und Papier. Es wird angenommen, dass, wenn ein Problem durch einen Algorithmus gelöst werden kann, eine Turing-Maschine vorhanden ist, die das Problem löst. Dies ist in der Tat die Aussage der Church-Turing-These. Darüber hinaus ist es bekannt, dass alles, was mit anderen heute bekannten Rechenmodellen berechnet werden kann, wie z. B. einer RAM-Maschine, Conways Game of Life, Zellularautomaten oder einer beliebigen Programmiersprache, auf einer Turing-Maschine berechnet werden kann. Da Turing-Maschinen mathematisch einfach zu analysieren sind und von denen angenommen wird, dass sie so leistungsfähig sind wie jedes andere Berechnungsmodell, ist die Turing-Maschine das am häufigsten verwendete Modell in der Komplexitätstheorie.
Viele Arten von Turingmaschinen werden zur Definition von Komplexitätsklassen verwendet, wie deterministische Turingmaschinen, probabilistische Turingmaschinen, nicht deterministische Turingmaschinen, Quanten-Turingmaschinen, symmetrische Turingmaschinen und alternierende Turingmaschinen. Sie sind im Prinzip alle gleich mächtig, aber wenn Ressourcen (wie Zeit oder Raum) begrenzt sind, sind einige von ihnen möglicherweise mächtiger als andere.
Eine deterministische Turingmaschine ist die grundlegendste Turingmaschine, die zur Festlegung ihrer zukünftigen Aktionen einen festen Satz von Regeln verwendet. Eine probabilistische Turingmaschine ist eine deterministische Turingmaschine mit einem zusätzlichen Vorrat an Zufallsbits. Die Möglichkeit, probabilistische Entscheidungen zu treffen, hilft Algorithmen dabei, Probleme effizienter zu lösen. Algorithmen, die Zufallsbits verwenden, werden als randomisierte Algorithmen bezeichnet. Eine nicht-deterministische Turing-Maschine ist eine deterministische Turing-Maschine mit dem zusätzlichen Merkmal des Nicht-Determinismus, die es einer Turing-Maschine ermöglicht, aus einem gegebenen Zustand mehrere mögliche zukünftige Aktionen auszuführen. Eine Möglichkeit, den Nicht-Determinismus zu betrachten, besteht darin, dass sich die Turing-Maschine bei jedem Schritt in viele mögliche Berechnungspfade verzweigt. Wenn das Problem in einem dieser Zweige gelöst wird, soll es das Problem gelöst haben. Natürlich ist dieses Modell nicht als physikalisch realisierbares Modell gedacht, es ist nur eine theoretisch interessante abstrakte Maschine, die zu besonders interessanten Komplexitätsklassen führt. Beispiele finden Sie unter nicht deterministischer Algorithmus.
Andere Maschinenmodelle [ edit ]
Viele Maschinenmodelle, die sich von den Standard-Multiband-Turingmaschinen unterscheiden, wurden in der Literatur vorgeschlagen, zum Beispiel Direktzugriffsmaschinen. Überraschenderweise kann jedes dieser Modelle ohne zusätzliche Rechenleistung in ein anderes umgewandelt werden. Zeit und Speicherverbrauch dieser alternativen Modelle können variieren. [2] Allen diesen Modellen ist gemeinsam, dass die Maschinen deterministisch arbeiten.
Einige Berechnungsprobleme lassen sich jedoch anhand ungewöhnlicher Ressourcen leichter analysieren. Beispielsweise ist eine nicht deterministische Turing-Maschine ein Rechenmodell, das verzweigt werden kann, um viele verschiedene Möglichkeiten gleichzeitig zu prüfen. Die nicht-deterministische Turing-Maschine hat sehr wenig damit zu tun, wie wir physikalisch Algorithmen berechnen wollen, aber ihre Verzweigung erfasst viele der mathematischen Modelle, die wir analysieren möchten, so dass nicht-deterministische Zeit eine sehr wichtige Ressource für die Analyse von Berechnungsproblemen ist .
Komplexitätsmaße [ edit ]
Für eine genaue Definition dessen, was es bedeutet, ein Problem unter Verwendung einer bestimmten Zeit und eines bestimmten Raums zu lösen, eines Rechenmodells wie der deterministischen Turing-Maschine wird eingesetzt. Die -Zeit die eine deterministische Turing-Maschine M am Eingang x benötigt, ist die Gesamtzahl der Zustandsübergänge oder Schritte, die die Maschine macht, bevor sie stoppt und ausgibt antworte ja oder nein"). Eine Turing-Maschine M soll innerhalb der Zeit ( n ) arbeiten, wenn die von M benötigte Zeit bei jeder Längeneingabe erforderlich ist n ist höchstens f ( n ). Ein Entscheidungsproblem A kann zeitlich gelöst werden f ( n ), wenn eine Turing-Maschine existiert, die rechtzeitig arbeitet f () ] n ), das das Problem löst. Da die Komplexitätstheorie daran interessiert ist, Probleme anhand ihrer Schwierigkeit zu klassifizieren, werden Problemgruppen anhand einiger Kriterien definiert. Zum Beispiel wird die Menge der Probleme, die innerhalb einer bestimmten Zeit f ( n ) auf einer deterministischen Turing-Maschine lösbar sind, dann mit DTIME ( f [ n n) bezeichnet. )).
Für den Platzbedarf können analoge Definitionen gemacht werden. Obwohl Zeit und Raum die bekanntesten Komplexitätsressourcen sind, kann jedes Maß der Komplexität als Rechenressource betrachtet werden. Komplexitätsmaße werden sehr allgemein durch die Komplexitätsaxiome von Blum definiert. Andere in der Komplexitätstheorie verwendete Komplexitätsmaße umfassen Kommunikationskomplexität, Schaltungskomplexität und Entscheidungsbaumkomplexität.
Die Komplexität eines Algorithmus wird oft in einer großen O-Notation ausgedrückt.
Beste, schlechteste und durchschnittliche Fallkomplexität [ edit ]
Die beste, schlechteste und durchschnittliche Fallkomplexität bezieht sich auf drei verschiedene Arten der Messung der Zeitkomplexität (oder eines anderen Komplexitätsmaßes). von verschiedenen Eingängen der gleichen Größe. Da einige Eingaben der Größe n möglicherweise schneller zu lösen sind als andere, definieren wir die folgenden Komplexitäten:
- Komplexität im besten Fall: Dies ist die Komplexität der Lösung des Problems für die beste Eingabe der Größe n .
- Durchschnittliche Fallkomplexität: Dies ist die Komplexität der Lösung des Problems im Durchschnitt. Diese Komplexität wird nur in Bezug auf eine Wahrscheinlichkeitsverteilung über die Eingaben definiert. Wenn beispielsweise angenommen wird, dass alle Inputs der gleichen Größe gleich wahrscheinlich sind, kann die durchschnittliche Fallkomplexität in Bezug auf die gleichmäßige Verteilung über alle Inputs der Größe definiert werden n .
- Amortized analysis : Die amortisierte Analyse berücksichtigt sowohl die kostspieligen als auch die weniger kostspieligen Operationen zusammen über die gesamte Reihe von Operationen des Algorithmus.
- Komplexität im ungünstigsten Fall: Dies ist die Komplexität der Lösung des Problems für die schlechteste Eingabe der Größe n [19459023
Die Reihenfolge von billig nach teuer lautet: Best, durchschnittlich (diskrete Gleichverteilung), amortisiert, am schlechtesten.
Betrachten Sie zum Beispiel den deterministischen Sortieralgorithmus. Dies löst das Problem der Sortierung einer Liste von Ganzzahlen, die als Eingabe angegeben wird. Der ungünstigste Fall liegt vor, wenn die Eingabe in umgekehrter Reihenfolge sortiert wird und der Algorithmus für diesen Fall die Zeit O ( n 2 ) benötigt. Wenn wir davon ausgehen, dass alle möglichen Permutationen der Eingabeliste gleich wahrscheinlich sind, beträgt die durchschnittliche Zeit zum Sortieren 0 ( n log n ). Der beste Fall tritt auf, wenn jede Verschwenkung die Liste in zwei Hälften teilt und auch O-Zeit ( n log n ) Zeit benötigt.
Ober- und Untergrenzen der Komplexität von Problemen [ edit ]
Um die Rechenzeit (oder ähnliche Ressourcen, wie z. B. den Raumverbrauch) zu klassifizieren, ist man daran interessiert, Upper und Proof zu beweisen untere Grenzen für die maximale Zeitdauer, die der effizienteste Algorithmus benötigt, um ein gegebenes Problem zu lösen. Die Komplexität eines Algorithmus wird normalerweise als die Worst-Case-Komplexität betrachtet, sofern nicht anders angegeben. Die Analyse eines bestimmten Algorithmus fällt in den Bereich der Analyse von Algorithmen. Um eine obere Schranke T ( n ) bezüglich der zeitlichen Komplexität eines Problems darzustellen, muss nur gezeigt werden, dass es einen bestimmten Algorithmus mit einer Laufzeit von höchstens T ( n ). Das Prüfen der unteren Grenzen ist jedoch viel schwieriger, da die unteren Grenzen eine Aussage über alle möglichen Algorithmen treffen, die ein gegebenes Problem lösen. Der Ausdruck "alle möglichen Algorithmen" umfasst nicht nur die heute bekannten Algorithmen, sondern jeden Algorithmus, der in der Zukunft entdeckt werden könnte. Um eine untere Schranke von T ( n ) für ein Problem darzustellen, muss gezeigt werden, dass kein Algorithmus eine geringere Zeitkomplexität als T ( n [19459023)habenkann]).
Ober- und Untergrenze werden normalerweise mit der großen O-Notation angegeben, wodurch konstante Faktoren und kleinere Terme verborgen werden. Dies macht die Grenzen unabhängig von den spezifischen Details des verwendeten Rechenmodells. Zum Beispiel, wenn T ( n ) = 7 n 2 + 15 n + 40, in großer O-Notation eins würde schreiben T ( n ) = O ( n 2 ).
Komplexitätsklassen [ edit ]
Definieren von Komplexitätsklassen [ edit
A ist eine Komplexitätsklasse von Problemen verwandter Komplexität. Einfachere Komplexitätsklassen werden durch folgende Faktoren definiert:
- Die Art des Rechenproblems: Die am häufigsten verwendeten Probleme sind Entscheidungsprobleme. Komplexitätsklassen können jedoch auf der Grundlage von Funktionsproblemen, Zählproblemen, Optimierungsproblemen, Versprechungsproblemen usw. definiert werden.
- Das Berechnungsmodell: Das am häufigsten verwendete Berechnungsmodell ist die deterministische Turing-Maschine, auf der jedoch viele Komplexitätsklassen basieren nicht deterministische Turingmaschinen, boolesche Schaltungen, Quanten-Turingmaschinen, monotone Schaltungen usw.
- Die Ressourcen (oder Ressourcen), die begrenzt werden, und die Grenzen: Diese beiden Eigenschaften werden normalerweise zusammen angegeben, z. B. "Polynomialzeit". "logarithmischer Raum", "konstante Tiefe" usw.
Einige Komplexitätsklassen haben komplizierte Definitionen, die nicht in dieses Framework passen. Daher hat eine typische Komplexitätsklasse die folgende Definition:
- Die Menge der Entscheidungsprobleme, die durch eine deterministische Turing-Maschine innerhalb einer Zeit gelöst werden können f ( n ). (Diese Komplexitätsklasse ist als DTIME bekannt ( f ( n )).)
Aber die oben genannte Rechenzeit wird durch eine konkrete Funktion begrenzt f ( n ) ergibt häufig Komplexitätsklassen, die vom gewählten Maschinenmodell abhängen. Zum Beispiel die Sprache { xx | x ist eine beliebige binäre Zeichenfolge}, die auf einer Multi-Tape-Turing-Maschine in linearer Zeit gelöst werden kann, erfordert jedoch notwendigerweise eine quadratische Zeit im Modell von Single-Tape-Turing-Maschinen. Wenn wir Polynomialvariationen in der Laufzeit zulassen, heißt es in der Cobham-Edmonds-These, dass "die zeitlichen Komplexitäten in zwei vernünftigen und allgemeinen Berechnungsmodellen polynomial miteinander zusammenhängen" (Goldreich 2008, Kapitel 1.2). Dies bildet die Grundlage für die Komplexitätsklasse P, die die Menge der Entscheidungsprobleme darstellt, die von einer deterministischen Turingmaschine innerhalb der Polynomialzeit gelöst werden können. Die entsprechenden Funktionsprobleme sind FP.
Wichtige Komplexitätsklassen [ edit ]
Viele wichtige Komplexitätsklassen können durch Begrenzung der vom Algorithmus verwendeten Zeit oder des Raums definiert werden. Einige wichtige Komplexitätsklassen von auf diese Weise definierten Entscheidungsproblemen sind folgende:
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die logarithmischen Raumklassen berücksichtigen (notwendigerweise) nicht den Raum, der zur Darstellung des Problems erforderlich ist.
Es stellt sich heraus, dass PSPACE = NPSPACE und EXPSPACE = NEXPSPACE nach dem Satz von Savitch.
Weitere wichtige Komplexitätsklassen umfassen BPP, ZPP und RP, die mit probabilistischen Turing-Maschinen definiert werden; AC und NC, die über boolesche Schaltungen definiert werden; und BQP und QMA, die unter Verwendung von Quantenturingmaschinen definiert werden. #P ist eine wichtige Komplexitätsklasse für Zählprobleme (keine Entscheidungsprobleme). Klassen wie IP und AM werden mit Interactive Proof-Systemen definiert. ALL ist die Klasse aller Entscheidungsprobleme.
Hierarchietheoreme [ edit ]
Für die auf diese Weise definierten Komplexitätsklassen ist es wünschenswert zu beweisen, dass die Lockerung der Anforderungen an die Rechenzeit (sagen wir) tatsächlich eine größere Menge von Recheneinheiten definiert Probleme. Obwohl DTIME ( n ) in DTIME ( n 2 ) enthalten ist, wäre es insbesondere interessant zu wissen, ob die Einbeziehung streng ist. Für Zeit- und Raumanforderungen wird die Antwort auf solche Fragen durch Zeit- und Raumhierarchietheorien gegeben. Sie werden als Hierarchiesätze bezeichnet, da sie eine korrekte Hierarchie für die definierten Klassen erzeugen, indem sie die jeweiligen Ressourcen einschränken. Es gibt also Paare von Komplexitätsklassen, so dass einer richtig in den anderen aufgenommen wird. Nachdem wir solche richtigen Einschlüsse abgeleitet haben, können wir quantitative Aussagen darüber machen, wie viel zusätzlicher Zeit- oder Raumaufwand erforderlich ist, um die Anzahl der zu lösenden Probleme zu erhöhen.
Genauer gesagt, der Theorem der Zeithierarchie besagt dies
- .
The der Raumhierarchiesatz besagt das
- .
Die Uhrzeit Platzhierarchietheoreme bilden die Grundlage für die meisten Trennungsergebnisse von Komplexitätsklassen. Zum Beispiel sagt uns der Zeithierarchiesatz, dass P streng in EXPTIME enthalten ist, und der Raumhierarchiesatz besagt, dass L streng in PSPACE enthalten ist.
Reduktion [ edit ]
Viele Komplexitätsklassen werden unter Verwendung des Konzepts einer Reduktion definiert. Eine Reduktion ist die Umwandlung eines Problems in ein anderes Problem. Es beinhaltet die informelle Vorstellung, dass ein Problem höchstens so schwierig ist wie ein anderes Problem. Wenn beispielsweise ein Problem X mit einem Algorithmus für Y X gelöst werden kann, ist es nicht schwieriger als Y und wir sagen, dass X auf Y reduziert. Es gibt viele verschiedene Arten von Reduktionen, basierend auf der Reduktionsmethode, wie Cook-Reduktionen, Karp-Reduktionen und Levin-Reduktionen, und die Beschränkung auf die Komplexität von Reduktionen, wie etwa Polynomialzeit-Reduktionen oder Log-Space-Reduktionen.
Die am häufigsten verwendete Reduktion ist eine Polynomzeit-Reduktion. Dies bedeutet, dass der Reduktionsprozess Polynomialzeit benötigt. Beispielsweise kann das Problem des Quadrierens einer Ganzzahl auf das Problem der Multiplikation zweier Ganzzahlen reduziert werden. Dies bedeutet, dass ein Algorithmus zum Multiplizieren von zwei ganzen Zahlen verwendet werden kann, um eine ganze Zahl zu quadrieren. In der Tat kann dies erreicht werden, indem beiden Eingängen des Multiplikationsalgorithmus die gleiche Eingabe gegeben wird. Wir sehen also, dass das Quadrieren nicht schwieriger ist als die Multiplikation, da das Quadrieren auf die Multiplikation reduziert werden kann.
Dies motiviert das Konzept eines Problems, das für eine Komplexitätsklasse schwer ist. Ein Problem X ist hart für eine Klasse von Problemen C wenn jedes Problem in C auf X reduziert werden kann ]. Daher ist kein Problem in C schwieriger als X da ein Algorithmus für X es ermöglicht, Probleme in C zu lösen. Die Vorstellung von harten Problemen hängt von der Art der verwendeten Reduktion ab. Für Komplexitätsklassen, die größer als P sind, werden im Allgemeinen Polynomialzeitverringerungen verwendet. Insbesondere ist die Menge von Problemen, die für NP schwer sind, die Menge von NP-harten Problemen.
Wenn ein Problem X in C und hart für C ist, dann soll X abgeschlossen sein . für C . Dies bedeutet, dass X das schwierigste Problem in C ist. (Da viele Probleme ebenso schwer sein könnten, könnte man sagen, dass X eines der schwierigsten Probleme in C ist.) Die Klasse der NP-vollständigen Probleme enthält daher die schwierigsten Probleme NP, in dem Sinne, dass sie am wahrscheinlichsten nicht in P sind. Da das Problem P = NP nicht gelöst ist, kann ein bekanntes NP-komplettes Problem, Π 2 auf ein anderes reduziert werden Problem, Π 1 deutet darauf hin, dass es keine bekannte Lösung für Polynomialzeiten für Π 1 gibt. Dies liegt daran, dass eine Lösung mit Polynomialzeit für Π 1 eine Polynomialzeitlösung für Π 2 ergeben würde. Da alle NP-Probleme auf die Menge reduziert werden können, bedeutet das Auffinden eines NP-vollständigen Problems, das in Polynomialzeit gelöst werden kann, P = NP. [3]
Wichtige offene Probleme [ edit ]
P vs. NP-Problem [ edit ]
Die Komplexitätsklasse P wird häufig gesehen als mathematische Abstraktionsmodellierung der Rechenaufgaben, die einen effizienten Algorithmus zulassen. Diese Hypothese wird als Cobham-Edmonds-These bezeichnet. Andererseits enthält die Komplexitätsklasse NP viele Probleme, die die Menschen effizient lösen möchten, für die jedoch kein effizienter Algorithmus bekannt ist, wie beispielsweise das Boolesche Erfüllbarkeitsproblem, das Hamilton-Pfadproblem und das Problem der Scheitelpunktabdeckung. Da deterministische Turing-Maschinen spezielle nicht-deterministische Turing-Maschinen sind, lässt sich leicht beobachten, dass jedes Problem in P ebenfalls Mitglied der Klasse NP ist.
Die Frage, ob P gleich NP ist, ist aufgrund der weiten Implikationen einer Lösung eine der wichtigsten offenen Fragen in der theoretischen Informatik. [3] Wenn die Antwort ja ist, kann gezeigt werden, dass viele wichtige Probleme effizienter sind Lösungen. Dazu gehören verschiedene Arten von Integer-Programmierproblemen in der Operationsforschung, viele Probleme in der Logistik, die Vorhersage von Proteinstrukturen in der Biologie [5] und die Möglichkeit, formale Beweise für reine mathematische Theoreme zu finden. [6] Millenniums-Preis-Probleme, vorgeschlagen vom Clay Mathematics Institute. There is a US$1,000,000 prize for resolving the problem.[7]
Problems in NP not known to be in P or NP-complete[edit]
It was shown by Ladner that if P ≠ NP then there exist problems in NP that are neither in P nor NP-complete.[4] Such problems are called NP-intermediate problems. The graph isomorphism problem, the discrete logarithm problem and the integer factorization problem are examples of problems believed to be NP-intermediate. They are some of the very few NP problems not known to be in P or to be NP-complete.
The graph isomorphism problem is the computational problem of determining whether two finite graphs are isomorphic. An important unsolved problem in complexity theory is whether the graph isomorphism problem is in PNP-completeor NP-intermediate. The answer is not known, but it is believed that the problem is at least not NP-complete.[8] If graph isomorphism is NP-complete, the polynomial time hierarchy collapses to its second level.[9] Since it is widely believed that the polynomial hierarchy does not collapse to any finite level, it is believed that graph isomorphism is not NP-complete. The best algorithm for this problem, due to László Babai and Eugene Luks has run time for graphs with n vertices, although some recent work by Babai offers some potentially new perspectives on this.[10]
The integer factorization problem is the computational problem of determining the prime factorization of a given integer. Phrased as a decision problem, it is the problem of deciding whether the input has a prime factor less than k. No efficient integer factorization algorithm is known, and this fact forms the basis of several modern cryptographic systems, such as the RSA algorithm. The integer factorization problem is in NP and in co-NP (and even in UP and co-UP[11]). If the problem is NP-completethe polynomial time hierarchy will collapse to its first level (i.e., NP will equal co-NP). The best known algorithm for integer factorization is the general number field sieve, which takes time [12] to factor an integer n. However, the best known quantum algorithm for this problem, Shor's algorithm, does run in polynomial time. Unfortunately, this fact doesn't say much about where the problem lies with respect to non-quantum complexity classes.
Separations between other complexity classes[edit]
Many known complexity classes are suspected to be unequal, but this has not been proved. For instance P ⊆ NP ⊆ PP ⊆ PSPACEbut it is possible that P = PSPACE. If P is not equal to NPthen P is not equal to PSPACE either. Since there are many known complexity classes between P and PSPACEsuch as RPBPPPPBQPMAPHetc., it is possible that all these complexity classes collapse to one class. Proving that any of these classes are unequal would be a major breakthrough in complexity theory.
Along the same lines, co-NP is the class containing the complement problems (i.e. problems with the yes/no answers reversed) of NP problems. It is believed[13] that NP is not equal to co-NP; however, it has not yet been proven. It is clear that if these two complexity classes are not equal then P is not equal to NPsince if P=NP we would also have P=co-NPsince problems in NP are dual to those in co-NP.
Similarly, it is not known if L (the set of all problems that can be solved in logarithmic space) is strictly contained in P or equal to P. Again, there are many complexity classes between the two, such as NL and NCand it is not known if they are distinct or equal classes.
It is suspected that P and BPP are equal. However, it is currently open if BPP = NEXP.
Intractability[edit]
A problem that can be solved in theory (e.g. given large but finite resources, especially time), but for which in practice any solution takes too many resources to be useful, is known as an intractable problem.[14] Conversely, a problem that can be solved in practice is called a tractable problemliterally "a problem that can be handled". The term infeasible (literally "cannot be done") is sometimes used interchangeably with intractable,[15] though this risks confusion with a feasible solution in mathematical optimization.[16]
Tractable problems are frequently identified with problems that have polynomial-time solutions (PPTIME); this is known as the Cobham–Edmonds thesis. Problems that are known to be intractable in this sense include those that are EXPTIME-hard. If NP is not the same as P, then NP-hard problems are also intractable in this sense.
However, this identification is inexact: a polynomial-time solution with large degree or large leading coefficient grows quickly, and may be impractical for practical size problems; conversely, an exponential-time solution that grows slowly may be practical on realistic input, or a solution that takes a long time in the worst case may take a short time in most cases or the average case, and thus still be practical. Saying that a problem is not in P does not imply that all large cases of the problem are hard or even that most of them are. For example, the decision problem in Presburger arithmetic has been shown not to be in P, yet algorithms have been written that solve the problem in reasonable times in most cases. Similarly, algorithms can solve the NP-complete knapsack problem over a wide range of sizes in less than quadratic time and SAT solvers routinely handle large instances of the NP-complete Boolean satisfiability problem.
To see why exponential-time algorithms are generally unusable in practice, consider a program that makes 2n operations before halting. For small nsay 100, and assuming for the sake of example that the computer does 1012 operations each second, the program would run for about 4 × 1010 years, which is the same order of magnitude as the age of the universe. Even with a much faster computer, the program would only be useful for very small instances and in that sense the intractability of a problem is somewhat independent of technological progress. However, an exponential-time algorithm that takes 1.0001n operations is practical until n gets relatively large.
Similarly, a polynomial time algorithm is not always practical. If its running time is, say, n15it is unreasonable to consider it efficient and it is still useless except on small instances. Indeed, in practice even n3 or n2 algorithms are often impractical on realistic sizes of problems.
History[edit]
An early example of algorithm complexity analysis is the running time analysis of the Euclidean algorithm done by Gabriel Lamé in 1844.
Before the actual research explicitly devoted to the complexity of algorithmic problems started off, numerous foundations were laid out by various researchers. Most influential among these was the definition of Turing machines by Alan Turing in 1936, which turned out to be a very robust and flexible simplification of a computer.
The beginning of systematic studies in computational complexity is attributed to the seminal 1965 paper "On the Computational Complexity of Algorithms" by Juris Hartmanis and Richard E. Stearns, which laid out the definitions of time complexity and space complexity, and proved the hierarchy theorems.[17] In addition, in 1965 Edmonds suggested to consider a "good" algorithm to be one with running time bounded by a polynomial of the input size.[18]
Earlier papers studying problems solvable by Turing machines with specific bounded resources include[17]John Myhill's definition of linear bounded automata (Myhill 1960), Raymond Smullyan's study of rudimentary sets (1961), as well as Hisao Yamada's paper[19] on real-time computations (1962). Somewhat earlier, Boris Trakhtenbrot (1956), a pioneer in the field from the USSR, studied another specific complexity measure.[20] As he remembers:
However, [my] initial interest [in automata theory] was increasingly set aside in favor of computational complexity, an exciting fusion of combinatorial methods, inherited from switching theory, with the conceptual arsenal of the theory of algorithms. These ideas had occurred to me earlier in 1955 when I coined the term "signalizing function", which is nowadays commonly known as "complexity measure".[21]
In 1967, Manuel Blum formulated a set of axioms (now known as Blum axioms) specifying desirable properties of complexity measures on the set of computable functions and proved an important result, the so-called speed-up theorem. The field began to flourish in 1971 when the Stephen Cook and Leonid Levin proved the existence of practically relevant problems that are NP-complete. In 1972, Richard Karp took this idea a leap forward with his landmark paper, "Reducibility Among Combinatorial Problems", in which he showed that 21 diverse combinatorial and graph theoretical problems, each infamous for its computational intractability, are NP-complete.[22]
In the 1980s, much work was done on the average difficulty of solving NP-complete problems—both exactly and approximately. At that time, computational complexity theory was at its height, and it was widely believed that if a problem turned out to be NP-complete, then there was little chance of being able to work with the problem in a practical situation. However, it became increasingly clear that this is not always the case, and some authors claimed that general asymptotic results are often unimportant for typical problems arising in practice.[23]
See also[edit]
References[edit]
Citations[edit]
- ^ "P vs NP Problem | Clay Mathematics Institute". www.claymath.org.
- ^ See Arora & Barak 2009, Chapter 1: The computational model and why it doesn't matter
- ^ a b See Sipser 2006, Chapter 7: Time complexity
- ^ a b Ladner, Richard E. (1975), "On the structure of polynomial time reducibility", Journal of the ACM22 (1): 151–171, doi:10.1145/321864.321877.
- ^ Berger, Bonnie A.; Leighton, T (1998), "Protein folding in the hydrophobic-hydrophilic (HP) model is NP-complete", Journal of Computational Biology5 (1): 27–40, CiteSeerX 10.1.1.139.5547doi:10.1089/cmb.1998.5.27, PMID 9541869.
- ^ Cook, Stephen (April 2000), The P versus NP Problem (PDF)Clay Mathematics Institute, archived from the original (PDF) on December 12, 2010retrieved October 18, 2006.
- ^ Jaffe, Arthur M. (2006), "The Millennium Grand Challenge in Mathematics" (PDF)Notices of the AMS53 (6)retrieved 2006-10-18.
- ^ Arvind, Vikraman; Kurur, Piyush P. (2006), "Graph isomorphism is in SPP", Information and Computation204 (5): 835–852, doi:10.1016/j.ic.2006.02.002.
- ^ Schöning, Uwe (1987). "Graph isomorphism is in the low hierarchy". Proceedings of the 4th Annual Symposium on Theoretical Aspects of Computer Science. Vorlesungsskript in der Informatik. 1987: 114–124. doi:10.1007/bfb0039599. ISBN 978-3-540-17219-2.
- ^ Babai, László (2016). "Graph Isomorphism in Quasipolynomial Time". arXiv:1512.03547 [cs.DS].
- ^ Lance Fortnow. Computational Complexity Blog: Complexity Class of the Week: Factoring. September 13, 2002. http://weblog.fortnow.com/2002/09/complexity-class-of-week-factoring.html
- ^ Wolfram MathWorld: Number Field Sieve
- ^ Boaz Barak's course on Computational Complexity Lecture 2
- ^ Hopcroft, J.E., Motwani, R. and Ullman, J.D. (2007) Introduction to Automata Theory, Languages, and Computation, Addison Wesley, Boston/San Francisco/New York (page 368)
- ^ Meurant, Gerard (2014). Algorithms and Complexity. p. p. 4. ISBN 978-0-08093391-7.
- ^
Zobel, Justin (2015). Writing for Computer Science. p. 132. ISBN 978-1-44716639-9. - ^ a b Fortnow & Homer (2003)
- ^ Richard M. Karp, "Combinatorics, Complexity, and Randomness", 1985 Turing Award Lecture
- ^ Yamada, H. (1962). "Real-Time Computation and Recursive Functions Not Real-Time Computable". IEEE Transactions on Electronic Computers. EC-11 (6): 753–760. doi:10.1109/TEC.1962.5219459.
- ^ Trakhtenbrot, B.A.: Signalizing functions and tabular operators. Uchionnye Zapiski
Penzenskogo Pedinstituta (Transactions of the Penza Pedagogoical Institute) 4, 75–87 (1956) (in Russian) - ^ Boris Trakhtenbrot, "From Logic to Theoretical Computer Science – An Update". In: Pillars of Computer ScienceLNCS 4800, Springer 2008.
- ^ Richard M. Karp (1972), "Reducibility Among Combinatorial Problems" (PDF) in R. E. Miller and J. W. Thatcher (editors), Complexity of Computer ComputationsNew York: Plenum, pp. 85–103CS1 maint: Extra text: editors list (link)
- ^ Wolfram, Stephen (2002). A New Kind of Science. Wolfram Media, Inc. p. 1143. ISBN 978-1-57955-008-0.
Textbooks[edit]
- Arora, Sanjeev; Barak, Boaz (2009), Computational Complexity: A Modern ApproachCambridge, ISBN 978-0-521-42426-4, Zbl 1193.68112
- Downey, Rod; Fellows, Michael (1999), Parameterized complexityBerlin, New York: Springer-Verlag
- Du, Ding-Zhu; Ko, Ker-I (2000), Theory of Computational ComplexityJohn Wiley & Sons, ISBN 978-0-471-34506-0
- Garey, Michael R.; Johnson, David S. (1979), Computers and Intractability: A Guide to the Theory of NP-CompletenessW. H. Freeman, ISBN 0-7167-1045-5
- Goldreich, Oded (2008), Computational Complexity: A Conceptual PerspectiveCambridge University Press
- van Leeuwen, Jan, ed. (1990), Handbook of theoretical computer science (vol. A): algorithms and complexityMIT Press, ISBN 978-0-444-88071-0
- Papadimitriou, Christos (1994), Computational Complexity (1st ed.), Addison Wesley, ISBN 978-0-201-53082-7
- Sipser, Michael (2006), Introduction to the Theory of Computation (2nd ed.), USA: Thomson Course Technology, ISBN 978-0-534-95097-2
Surveys[edit]
- Khalil, Hatem; Ulery, Dana (1976), "A Review of Current Studies on Complexity of Algorithms for Partial Differential Equations", Proceedings of the Annual Conference on - ACM 76: 197–201, doi:10.1145/800191.805573
- Cook, Stephen (1983), "An overview of computational complexity" (PDF)Commun. ACM26 (6): 400–408, doi:10.1145/358141.358144, ISSN 0001-0782
- Fortnow, Lance; Homer, Steven (2003), "A Short History of Computational Complexity" (PDF)Bulletin of the EATCS80: 95–133
- Mertens, Stephan (2002), "Computational Complexity for Physicists", Computing in Science and Eng.4 (3): 31–47, arXiv:cond-mat/0012185doi:10.1109/5992.998639, ISSN 1521-9615
No comments:
Post a Comment