Komplexitätsmaße TIME and SPACE :

specific part of [[theo2_VergleichModelleBerechenbarkeit]] broad part of [[112.00_anchor_overview]]


Bis dato haben wir nur entschieden, ob etwas berechnet / bestimmt werden kann oder nicht. Uns fehlt also noch ein Maß, um irgendwie determinieren zu können, wie lange oder wie viel Platz eine solche TM benötigt –> denn unendlich können sie nur theoretisch sein x)

Wir möchten also definieren: wie schnell oder mit welchem Zeitaufwand wir ein Problem lösen können. Dass es zu lösen ist, steht meist fest. Diese Bestimmung soll dabei unabhängig zur Architektur sein, also ist eine Beschreibung mit Zeit direkt suboptimal.

Zeitkomplexität:

Sei eine deterministische Einband-Turingmaschine über einem gegebenen Eingabealphabet , die immer anhält. wie beschreiben wir mit diesem Kontext jetzt Zeitkomplexität? #card Dann beschreiben wir die Zeitkomplexität als, die Berechnung von auf , wobei diese die benötigten Rechenschritte bis zum Anhalten der TM beschreibt. Also die Zeitkomplexität von M ist eine Funktion die folgend definiert ist:

Speicherplatzkomplexität:

Se eine deterministische Einband-Turingmaschine über einem spezifischen Eingabealphabet , die immer anhält. Sei eine beliebige Konfiguration von . Die Speicherplatzkomplexität der Berechnung von auf x, notiert mit , ist die maximale Anzahl an nicht-leeren Zellen auf dem Ein-/Ausgabeband während der Berechnung von auf . Wir beschreiben die Speicherplatzkomplexität von folgend mit einer Funktion , ferner definiert folgend:

nicht-leere Zellen:

Wir bezeichnen wir eine Zelle als nicht leere Zelle, sobald die TM einmal auf dieser Zelle operiert hat das heißt, wir müssen sie einfach nur besucht haben. Denn in jedem Rechenschritt muss die TM entweder ein Symbol setzen, oder sich bewegen. Wenn sie sich bewegt, zählt das leere Feld darunter auch als nicht leere Zelle.

[!error] würden wir das nicht betrachten, können wir damit eine Zahl so codieren, dass man einfach leere Zellen schreibt und anschließend ein Symbol setzt, was dies anzeigt. Also wir würden theoretisch keinen Speicherplatz benutzen, obwohl wir ihn definitiv brauchen!

Obere/ unter Schranken:

In etwa, wie bei Algorithmen als Schranken definiert [[105.05_algo_onotation#O-Notation / Laufzeitennotationen]].

Sei hier eine Sprache / alternativ eine Funktion ( wir können diese Aussage über beides treffen!)

Obere Schranke: Wir sagen jetzt, dass die Funktion eine obere Schranke für die Zeitkomplexität von oder auch f ist, falls es eine deterministische TM gibt, die entscheiden kann (oder auch f berechnet), so dass dann Anders beschrieben heißt dies: relativ wichtig, zum beweisen

Untere Schranke: Wir benennen weiterhin als eine untere Schranke für die Zeitkomplexität, falls für jede TM , welche entscheiden kann ( oder f berechnet), gilt, dass Mit der unteren Schranke beschreiben wir also das absolute Minima, was maximal erreicht werden. Anders beschrieben also: auch wichtig zum beweisen

alle TMs, die diesen Algo/diiese Sprache/Funktion berechnen können, müssen definitiv so schnell oder langsamer sein. Darunter liegt nichts, und wenn, dann ist das die neue unterste Schranke

Details einer Turingmaschine sind egal:

Im Moment ist unsere Definition nur auf die Komplexität einer Turingmaschine M limitiert. Was machen wir jetzt mit der Betrachtung für die verschiedenen Typen von TMS ( Kellerautomaten, non deterministische etc). Am Ende ist der Aufbau einer TM in dieser Betrachtung beinahe egal. Das wird ersichtlich mit der folgenden Betrachtung:

Behauptung:

Sei eine Funktion, die von einer TM mit einem Arbeitsalphabet in Zeit berechnet werden kann. Dann kann diese Funktion auch von einer TM mit dem Arbeitsalphabet in Zeit: berechnet werden. Die Idee für den Beweis folgt aus der Idee, dass: Kodiere jeden Buchstaben von mit vielen binären Bits. Also wir werden mit dieser Operation merken, dass sein wird.

Selbiges für verfügbaren Speicherplatz: Sei eine TM mit -Bändern, die die Funktion in einer bestimmten Zeit berechnet. Dann gibt es auch eine Einband-TM, die diese Funtion in Zeit berechnen kann. Wir wissen dabei aber, dass wir unter einer Betrachtung von also der Tendenz von in Richtung Unendlichkeit diverse Konstanten herausfallen werden und wir so mit selbiger Zeit resultieren.

alle weiteren, anderen Turingmaschinen folgen dann dem gleichen Schema. Das heißt, dass TMs, mit

  • anderer Schreibkopf-Bewegung
  • verschiedenen Band-Typen (einseitig/beidseitig …) genau gleich sind!

Ausnahme nd-TM:

Es ist ganz sicher nicht egal nicht-deterministische und deterministische Turingmaschinen gleichzustellen. Sie sind sehr wohl unterschiedlich in ihrer Zeit, denn: Die Verwendung einer nicht-deterministischen TM kann die Berechnung exponentiell schneller machen. Umgekehrt haben wir gesehen, dass wir jede nicht-deterministische TM mit einer deterministischen TM simulieren können, jedoch ist es dennoch so, dass sich diese Transformation in der Laufzeit wiederspiegelt! Die Laufzeit kann hierbei exponentiell größer werden!

Komplexitätsklasse :

Komplexitätsklasse :

Sei eine beliebige Funktion. Wir beschreiben jetzt dei Komplexitätsklasse als die Menge aller prachen die in Worst-Case-Laufzeit von einer deterministischen TM entschieden werden können: Folglich definieren wir diese Beschreibung so: Manchmal wird die Notation auch mit vorgenommen, wobei D für Deterministisch steht!

Komplexitätsklasse :

Sei eine Funktion. Die Komplexitätsklasse ist folglich die Menge aller Sprachen die im Worst Case mit dem Speicherplatzbedarf von einer deterministischen TM entschieden werden können. Wir definieren diese Beschreibung mit: Auch hier ist sonst noch die Beschreibung gültig.

Polynomielle Klassen und :

Wir können jetzt die Komplexitätsklasse von definieren und schreiben sie folgend auf: , also P enthält alle Sprachen, die in polynomieller Lauzeit von einer deterministischen TM entschieden werden können. Analog gilt dies natürlich auch für die Betrachtung von Speicherplatz:

[!warning] Entscheidungsproblem! Traditionell werden die Komplexitätsklassen für Entscheidungsprobleme über Sprachen definiert - also etwa, dass wir ein Wort in haben oder nicht. - aber nicht über Funktionen!

In der Praxis ist es aber üblich, dass man nicht immer Entscheidungsprobleme betrachten - Shortest path, search problems, etcetc.

Unter Umständen kann man aber dennoch Problemtypen zwischen diesen beiden Bereichen hin- und herschieben.

Beispiele dafür bilden etwa:

  • Optimierungsprobleme: Finde den kürzesten Weg zwischen und –> Ist kein Entscheidungsproblem!
  • Entscheidungsprobleme: Gibt es einen Weg zwischen und der Länge höchstens ? –> Ist jetzt eine Ja/Nein Frage,

Komplexitätsklasse :

Wir konnten jetzt deterministische TMs betrachten und einordnen, etwa unter der Annahme, dass wir mit diesen ein Problem in polynomieller Zeit lösen können. Wir wollen jetzt nicht-deterministische TMs betrachten.

(RE)-Definition von :

Sei eine nicht-deterministische TM über dem Eingabealphabet . Für ein beliebiges Wort ist die Zeitkomplexität nun folgend mit : beschrieben. Weiter ist die Zeitkomplexität von auf die Länge der kürzesten akzeptierenden Berechnungen, die weiterhin entscheidet - falls es 0 ist, dann haben wir keine akzeptierende Berechnung gefunden.

[!warning ] Scheinbar ähnlich/gleich, wie bei Deterministischen, aber wir betrachten hier nicht, dass wir die kürzeste Berechnung heraussuchen und ausgeben!

Sei ferner eine nicht-deterministische über . Dann ist . Falls es kein gibt, das Länge hat und in ist, setzen wir das Ergebnis ! Wir haben hier die Definition nur über Wörter über gesetzt, also ganz anders, als bei det. TMs.

Obere Schranken - schwach /stark beschränkt:

Sei eine Funktion. Wir sagen jetzt, dass eine nicht det. TM schwach-t(n)-bschränkt ist, falls für alle gilt: .

warning

Diese Aussage wird nur über akzeptierende Zustände getroffen!

Ferner ist N stark-t(n)-beschränkt, wenn jede( immernoch nur akzeptiert!) Berechnung auf w höchstens Schritte macht!

Komplexitätsklasse :

Sei . Die Komplexitätsklasse ist nun die Menge aller Sprachen die in Worst-Case-Laufzeit von einer nicht-det TM akzeptiert werden können. Das heißt jetzt: und außerdem:

Komplexitätsklasse :

Wir definieren jetzt die Komplexitätsklasse wie folgt: - also wir haben nicht det TMs, die diese Berechnung in polynomieller Zeit hinbekommen! = Nicht-det, polynomielle Zeit

NTMs gibt es nicht wirklich :

x)

  • irgendwie klar, aber um es nochmal deutlich anzumerken: NTMS sind nur ein theoretisches Konstrukt
  • Es ist erstaunlich hilfreich dabei, relevante echte Dinge zu charakterisieren - wie schwer ein Problem theoretisch ist.
  • Aber natürlich kann man so etwas nicht bauen
    • Quantencomputer kommen dem nur nahe, können aber auch nicht komplett nicht-det agieren!

Diese Komplexitätsklassen können wir jetzt in diversen Beispielen betrachten und damit Probleme kategorisieren.

Angewandte Komplexitätsklassen:

Boolesche Formeln:

Eine boolesche Forme - log. Forme - besteht aus booleschen true/false Variablen / Literalen (TI), die durch die Operatoren :

  1. Konjunktion
  2. Disjunktion
  3. Negation verknüpft werden.

Dieses Problem finden wir besipielsweise in der Anwendung von DNF/KNF in der technischen Informatik 1.

Erfüllbare Formel :

Eine boolesche Formel nennen wir jetzt erfüllbar, wenn es eine Belegung der Variablen mit Werten (True/False) gibt, sodass unsere Formel wahr ist. Also etwa eine Formel, wie

Klauseln:

Eine Klausel definieren wir folgend eine Formel, die nur aus Disjunktionen zwischen Literalen/Variablen besteht. Wir nennen diese Struktur dann eine konjunktive Normalform, wenn wir ein viele Klauseln konjunktiv zusammenschließen können:

Behauptung : Bool. Funktion CNF:

Jede beliebige Boolesche Funktion kann durch eine CNF-Formal ausgedrückt werden - exponentielle Länge, denn wir haben Belegungen bei Belegungen.

[!Behauptung] Sei eine beliebige Funktion. Dann gibt es eine boolesche Formel in CNF mit Variablen und einer Länge von , so dass für alle Die Länge einer boolschen Formel steht hier für die Anzahl der Zeichen in der Formel

Um dies zu beweisen betrachten wir eine passende Konstruktion:

Beweis:

Betrachten wir ein beliebiges Wort . Wir möchten ferner eine Klausel mit genau -Variablen konstruieren. Die Variablen werden passend beschrieben mit : , sodass wir dann gelten lassen können: Also wir entscheiden einfach für eine beliebige Eingabe und mappen dies dann entweder mit 1 oder 0. Für wählen wir jetzt die passende Klausel mit folgender Struktur:

Wir möchten jetzt diese gegebene Klausel in einer CNF zusammenfassen, die das Problem lösen wird:

Sei . Wir möchten jetzt die Formel: Durch unsere Konstruktion gilt jetzt weiterhin: ist in CNF Die Länge von ist denn:

  • jedes hat die Länge ( l gibt die Menge der Operatoren an)

Aufbauen zu dieser Entscheidung möchten wir jetzt das SAT Problem nohcmals definieren, auch schon hier [[111.99_algo_ProblemComplexity#Unsolvable Problems]]

SAT - Satisfiability Problem :

Gegeben sei eine boolesche Formel in einer konjunktiven Normalform. Es besteht die Frage, ob diese Formel erfüllbar ist, also wir eine Belegung der Variablen finden können, sodass die Formel wahr ist.

behauptung

Dies können wir beweisen, indem wir eine SAT-Formel mit Literalen über Variablen gegeben betrachten und jetzt eine beliebige / zufällige Belegung betrachten. Da wir etwas non-deterministisches haben, kann die konstruierte Maschine diese zufälligen Belegungen schnell berechnen und die Antwort in polynomieller Zeit finden.

Von SAT gibt es noch weitere Variationen, wie etwa 3-SAT, K-Sat, wobei die Variable K einfach angibt, wie viele unbekannte in jeder CNF auftaucht!

Polynomzeit-Reduktion