Sie sind auf Seite 1von 47

Komplexitätstheorie

- Schwierigkeit von Aufgabenstellungen

Richard Göbel

1
Fragestellungen

_ Eine Aufgabenstellung ist dann schwierig wenn ihre


Lösung
_ viel Rechenzeit oder
_ viel Speicherplatz oder …
_ viel von einer anderen Ressource verbraucht
_ Asymptotischer Aufwand relativ zur Größe der Eingabe
(O-Notation)
_ Das effizienteste Programm definiert die Schwierigkeit
_ Basis für die Analyse ist ein Maschinenmodell

2
Turingmaschine – das einfachste
Maschinenmodell

_ Maschinenmodell mit wenigen Komponenten


_ Arbeitsband für Zeichen
_ Lese- und Schreibkopf kann sich nach rechts und
nach links bewegen
_ Zustandszelle
_ Programmierung über Regeln
_ Es gibt keine mächtigere Maschine
_ These: jedes informationsverarbeitende System ist nicht
mächtiger als die Turingmaschine
_ Alan Turing – Wikipedia
_ https://de.wikipedia.org/wiki/Turingmaschine

3
Turingmaschine – ein einfaches Maschinenmodell

Arbeitsband  

Schreib/Lesekopf

Zustand

Programme als Regeln

Bedingungsteil Aktionsteil
alter Zustand Zeichen Kopf neuer Zustand Aktion

Aktionen: Kopf links, Kopf rechts, Zeichen schreiben


Turingmaschine – Invertierung Binärzahl

Bedingungsteil Aktionsteil _ Startzustand q0


_ Kopf steht am Anfang der Zeichenkette (ganz links)
Alter Kopf Neuer Aktion
Zustand Zustand _ Ablauf
1011 q0
q0 0 q1 1
0011 q1
q0 1 q1 0 0011 q0
0111 q1
q1 0 q0 R 0111 q0
q1 1 q0 R 0101 q1
0101 q0
0100 q1
0100 q0
5
Turingmaschine – Binärzahl um 1 vergrößern

Bedingungsteil Aktionsteil _ Startzustand q0


_ Kopf steht am Ende der Zeichenkette (ganz rechts)
Alter Kopf Neuer Aktion
Zustand Zustand _ Symbol für die leere Zelle: ☐
_ Ablauf
q0 0 q9 1 101 q0
q0 1 q1 0 100 q1
100 q0
q1 0 q0 L 110 q9
q0 ☐ q9 1

6
Aufwand für das Inkrementieren einer Binärzahl

_ Betrachte den ungünstigsten Fall


_ Die Zahl besteht aus einer Sequenz der Ziffer „1“
_ Der Lese- und Schreibkopf bewegt sich schrittweise über alle Ziffern
_ Der Zeitaufwand wächst linear mit der Länge der Zahl

_ Ist das eine realistische Annahme für reale Rechner?


_ Nein für kleinere Zahl (zum Beispiel 64 Bit)
_ Ja für sehr große Zahlen

_ Alternative Maschinenmodelle ermögliche eine genauere Analyse der Komplexität von Aufgabenstellungen
_ Beispiel: Random Access Machine (RAM)
_ Die Turingmaschine reicht aber trotzdem für gröbere Analysen (zum Beispiel polynomialer vs. exponentieller
Zeitaufwand)
7
Random Access Machine

Eingabeband Ausgabeband
 

Eingabezeiger Ausgabezeiger

Programm Speicher
1. Akkumulator 1.
2. 2.
3. 3.
4. 4.
Befehlszähler
 
Zentrale
Recheneinheit

8
Befehle der RAM

• c Zeichen (Character)
• i Position im Speicher
• p Befehlsnummer (Position)
• v Wert (Value)

Grundbefehle 1 Grundbefehle 2 Ergänzungsbefehle


 load i  goto p  mul i
 store i  if v then p  div i
 add i  dload v
 sub i  iload i
 read  istore i
 write c  end

9
Lesen einer binären Zahl

1. dload 0 8. store 1
2. store 1 9. load 2
3. read 10. if ‘0’ then 3
4. if ‘#’ then 15 11. dload 1
5. store 2 12. add 1
6. load 1 13. store 1
7. add 1 14. goto 3
15. end

10
Schreiben einer binären Zahl

1. dload 1 10. store 2 19. sub 2


2. store 2 11. goto 5 20. store 1
3. dload 2 12. load 2 21. load 2
4. store 3 13. sub 1 22. div 3
5. load 1 14. if 0 then 17 23. store 2
6. sub 2 15. write ‘0’ 24. if 0 then 26
7. if 0 then 12 16. goto 21 25. goto 12
8. load 2 17. write ‘1’ 26. write ‘#’
9. mul 3 18. load 1 27. end

11
Kann die Turingmaschine noch weiter vereinfacht warden?

Arbeitsband   Arbeitsband
streichen
Schreib/Lesekopf

Zustand

Programme als Regeln

Bedingungsteil Aktionsteil
Eingabezeichen statt Ausgabezeichen
alter Zustand Zeichen Kopf
Eingabezeichen neuer Zustand Aktion
Ausgabezeichen
Kopfzeichen lesen statt Aktion

Aktionen: Kopf links, Kopf rechts, Zeichen schreiben


Endlicher Automat

_ Zustand (einer von endlich vielen Zuständen)


_ Regeln
_ Eingabezeichen
_ alter Zustand Bedingung
_ Ausgabezeichen
_ neuer Zustand Aktion
_ Anfangszustand
_ Endzustände (ein oder mehrere)

13
Endlicher Automat – Führende Nullen unterdrücken

Bedingung Aktion

Zustand Zeichen Zustand Zeichen


S1 0/- S1 0 S1 -

1/1 S1 1 S2 1

S2 0 S2 0
0/0 S2 1/1
S2 1 S2 1

14
Vergleich endlicher Automat und Turimgmaschine

_ Der endliche Automat kann weniger als die Turingmaschine


_ Beispiel: Überprüfe ob ein geklammerter Ausdruck richtig gekammert ist:
_ (()((()))): Richtig
_ (()((())): Falsch
_ (()))((())): Falsch
_ Wie kann die Mächtigkeit von Maschinenmodellen verglichen werden?

15
Mächtigkeit eines Maschinenmodells

_ Mächtigkeit ist die Menge der lösbaren Aufgaben


_ Noch zu klären:
_ Was ist eine Aufgabe in diesem Zusammenhang?
_ Wie lässt sich eine in der Regel unendlich große Menge an Aufgabenstellungen darstellen?
_ Vergleich von zwei Maschinenmodellen A und B
_ A und B haben gleiche Mächtigkeit
_ A ist mächtiger als B
_ B ist mächtiger als A
_ A und B lassen sich nicht vergleichen

16
Aufgabenstellung als Funktion

_ Ein Maschinenmodell mit einem Programm definiert eine Funktion f auf der Menge von Zeichenketten

f : A*  Pf  A*

_ Andere Schreibweise für die Funktion

fp : A*  A* mit: fp(w) = f(p, w)

_ Menge der Funktionen für ein Maschinenmodell

F = { fp | p  Pf }

_ Bemerkung
_ Nicht jede Funktion terminiert für jede Eingabe
_ Viele Funktionen sind also nur partiell definiert

_ Achtung: In der Mathematik muss eine Funktion in der Regel total sein!
17
Methoden für den Vergleich von Maschinen

_ Finde für jedes Programm der Maschine A ein äquivalentes Programm der Maschine B
_ Zwei Programme sind äquivalent, wenn sie für jede Eingabe dieselbe Ausgabe liefern
Berücksichtigt auch
 w, v  A*: g(w, pg) = v  f(w, pf) = v Eingaben, die keine
_ In diesem Fall wäre B mindestens so mächtig wie A Ausgaben liefern.
_ Simuliere die Maschine A auf der Maschine B
_ Ordne jedem Speicher auf Maschine A entsprechenden Speicher auf Maschine B zu
_ Definiere Sequenzen von Befehlen auf Maschine B für jeden Befehl auf Maschine A

_ Beweise die Korrektheit des jeweiligen Ansatzes

18
Ergebnisse der Vergleiche

_ Turingmaschine und RAM sind bezüglich der Mächtigkeit gleich

_ Der endliche Automat hat eine geringere Mächtigkeit als die Turingmaschine
_ Beispiel geklammerter Ausdruck, Klammerstruktur korrekt?

_ Alle bekannten Maschinenmodelle sind nicht mächtiger als die Turingmaschine!

_ Auch „ähnliche“ Konzepte haben keine größere Mächtigkeit:


_ Grammatiken
_ µ-rekursive Funktionen
_ …

19
Folgerungen

_ Die Turingmaschine (RAM, etc.) scheint bezüglich der Mächtigkeit maximal zu sein.
_ Die Turingmaschine scheint ein Modell für die Informationsverarbeitung an sich zu sein!
_ Church-Turing-These (1936):
Jede im intuitiven Sinne berechenbare Funktion ist Turing-berechenbar.

20
Existieren vielleicht auch unlösbare Aufgabenstellungen?

_ Betrachte die folgende Aufgabenstellung:


_ Existiert ein Programm U für eine RAM,
_ das für ein anderes Programm P einer RAM und dessen Eingabe E
entscheidet,
_ ob das Programm P mit der Eingabe E nach endlich vielen Schritten anhält
(terminiert)?
_ Ausgabe für Programm U:
_ Programm hält (‘1’, ‘true’, ‘yes’ oder 'Ja' )
_ Programm hält nicht (‘0’, ‘false’, ‘no’ oder 'Nein')
_ STOPS? : PRAM  A*  { true, false }
_ Bezeichnung: Halteproblem

21
Beispiel einer Eingabe für die RAM

1 r e a d ; 2 i f 1 t h e n 2 ;

3 w r i t e 0 ; 4 e n d ; / 1 /

22
Programm U für das Halteproblem - Analyse

_ Annahme: es gibt ein solches Programm U


_ Modifiziere das Programm U wie folgt:
_ Programm U gibt „false“ aus, falls das Programm P mit Eingabe E nicht anhält
_ Programm U läuft unendlich lang, falls das Programm P mit Eingabe E anhält (i: goto i)
_ Starte das Programm U mit dem Programm U als Eingabe sowie dem Programm U als Daten
_ Wie verhält sich das Programm U in diesem Fall?

23
Menge aller Funktionen

_ Eine Funktion ordnet jeder Zeichenkette aus Input Output


A*:
0 …
_ entweder eine Zeichenkette oder
1 …
_ den Wert „undefiniert“ zu
00 …
_ Eine Funktion lässt sich durch eine unendliche
lange Sequenz von Zeichenketten darstellen 01 …
_ Diese unendliche lange Zeichenkette lässt sich 10 …
als reelle Zahl kodieren
11 …
_ Wie ist die Mächtigkeit der Menge der reellen
… …
Zahlen?

24
Menge aller denkbaren Programme

_ Jedes Programm besteht aus einer endlichen Menge von Anweisungen


_ Jedes Programm lässt sich als natürliche Zahl darstellen
_ Wie ist die Mächtigkeit der Menge der natürlichen Zahlen?

25
Vergleich der Mengen

_ Die Menge der Programme bildet eine abzählbare unendliche Menge


_ Die Menge der Funktionen bildet eine überabzählbare unendliche Menge
_ Die Menge der Funktionen ist deutlich größer als die Menge der Programme!
_ Nicht für jede Funktion existiert ein Programm!

26
Gruppen unlösbarer Probleme

_ Entscheidungsprobleme haben ein binäres Ergebnis (true, false)


_ Fall 1: Es gibt ein Programm, das immer terminiert falls das Ergebnis „true“ ist.
_ Fall 2: Es gibt ein Programm, das immer terminiert falls das Ergebnis „false“ ist.
_ Fall 3: Es gibt kein Programm, das für einen dieser beiden Fälle terminiert
_ In Fall 1 und Fall 2 ist ein Entscheidungsproblem „semi-entscheidbar“
_ In Fall 3 ist ein Entscheidungsproblem „unentscheidbar“
_ Programme mit anderen Ausgaben

27
Beispiel für verschiedene unlösbare Probleme

_ Hält ein Programm mit einer Eingabe an (Halteproblem)?


_ Erfüllt ein Programm eine Bedingung für alle Ausgaben (zum Beispiel: „Ausgabe ist sortiert“)?
_ Liefern zwei Programme dieselbe Ausgabe für jede Eingabe?

28
Schwierige Probleme

_ Gibt es lösbare Aufgabenstellungen, die aber trotzdem schwierig sind?


_ Schwierig kann bedeuten:
_ viel Speicherplatzverbrauch
_ lange Laufzeit
...
_ Komplexitätsmaß

29
Diskussion –was wird gemessen?

_ Laufzeit ist zum Beispiel abhängig von:


_ der Rechnertechnologie
_ dem Befehlssatz des Rechners
_ weiteren Prozessen auf diesem Rechner
_ der Menge der zu verarbeitenden Daten
_ Zentral: Schwierigkeit der Aufgabenstellung und nicht Laufzeit eines Programms
_ Der Aufwand wächst mindestens linear mit der Menge der zu verarbeitenden Daten!

30
Übung schwierige Aufgabenstellungen

_ Aufgabenblatt Komplexität, Aufgabe 1


_ Aufgabenblatt Komplexität, Aufgabe 2

31
Ansatz - Zielsetzung

_ Wähle ein Komplexitätsmaß


_ Analysiere das Verhältnis zwischen Menge der zu verarbeitenden Daten und dem Komplexitätsmaß
_ Betrachte nur den qualitativen Verlauf, wie zum Beispiel:
_ linear: O(n)
_ quadratisch: O(n2)
_ exponentiell: O(2n)
_ Die Komplexität einer Aufgabenstellung ist die Komplexität des effizientesten Programms
_ RAM als Referenzmaschine

32
Ober- und Untergrenze einer Aufgabenstellung bestimmen

_ Die Komplexität eines Programms für A ist eine


Transformation
B A Obergrenze für die Komplexität von A
_ Eine Untergrenze ergibt sich aus der Transformation
BInput AInput von einer Aufgabenstellung B mit bekannter
Komplexität in die Aufgabenstellung A
_ Transformiere die Eingabe von B in A
_ Transformiere die Ausgabe von A in B
BOutput AOutput _ Aufwand für die Transformation muss gering sein
(entsprechend der analysierten Komplexität)

33
Erfüllbarkeit logischer Ausdrücke

_ Logischer Ausdruck in konjunktiver Normalform


_ Klauseln mit logischem UND verknüpft
_ Jede Klausel enthält mit logischem ODER verknüpfte Literale
_ Jedes Literal besteht aus einer Variable und optional einem logischen NICHT
(l11  l12  . . .  l1n1)  (l21  l22  . . .  l1n2)  . . .
 (lm1  lm2  . . .  lmnm) mit lij : xij oder xij
_ Für welche Werte ist dieser Ausdruck erfüllt?
_ Beschränkung auf drei Literale pro Klausel: 3SAT
(l11  l12  l13)  (l21  l22  l23)  . . . (lm1  lm2  lm3)

34
Rucksackproblem

_ Optimales Füllen eines Rucksacks


_ Gegeben:
_ n Gegenstände
_ Gewichte: g1, g2, . . ., gn
_ Nutzen: a1, a2, . . ., an
_ Gesamtgewicht von G nicht überschreiten
_ Finde Auswahl von Gegenständen mit maximalem Nutzen
_ Modifiziertes Problem
_ Gewicht G muss genau erreicht werden
_ Nutzen wird nicht berücksichtigt

35
Hamiltonkreis

_ Gegeben ist ein gerichteter Graph


_ Finde einen Rundweg durch den Graphen der jeden Knoten genau einmal enthält

_ Problem des Handlungsreisenden: Finde den kürzesten Hamiltonkreis für einen Graphen mit gewichteten Kanten

36
Transformation - 3SAT  mod. Rucksackproblem

_ Erzeuge einen Gegenstand:


_ für jede Variable
_ für jede negierte Variable
_ Gewicht für einen Gegenstand ist eine Dezimalzahl mit einer Stelle für jede Klausel
_ Die Stelle gibt die Anzahl an, in der dieses Literal in der zugehörigen Klausel vorkommt
_ Ziel: Summe der Gewichte muss an jeder Stelle größer als Null sein
_ Beispiel:
(x1 x2  x3)  (x2  x3  x4)  (x1  x2  x4)

37
Transformation - Themen

_ Zielgewicht muss genau eingehalten werden


_ Definiere „hohes“ Zielgewicht . . .
_ . . . sowie Füllgewicht . . .
_ . . . die bei einer Summe von 1 oder größer das Zielgewicht erreichbar machen
_ Variable und negierte Variable dürfen nicht gleichzeitig gewählt werden
_ Führe eine weitere Stelle für jede Variable ein . . .
_ . . . an dieser Stelle Wert 1 für zugehörige Variable . . .
_ . . . sonst 0 . . .
_ . . . sowie Zielgewicht hat 1 an dieser Stelle

38
Ergebnisse

_ Mit diesem Ansatz konnten verschiedene Komplexitätsklassen identifiziert werden


_ Es gibt keinen Beweis, dass zwei Klassen wirklich unterschiedliche Komplexitäten haben
_ Es fehlen also Referenzprobleme mit bekannter Komplexität

39
Übung Transformation von Aufgabenstellungen

_ Aufgabenblatt Komplexität, Aufgabe 3

40
Diskussion

_ Eventuell existieren keine unterschiedlichen Komplexitätsklassen?


_ Dann müssten alle Aufgabenstellungen mit linearer Komplexität lösbar sein: Sehr unwahrscheinlich!
_ Eventuell existieren nur wenige Komplexitätsklassen?
_ Dann würden Komplexitätsklassen ohne Aufgabenstellungen existieren: Unwahrscheinlich!
_ Die identifizierten Komplexitätsklassen werden heute allgemein akzeptiert!

41
Zwei bekannte Klassen

 Zeitaufwand für die Lösung einer Aufgabenstellung wird durch ein Polygon begrenzt:
 Rechenoperation wie Addition und Subtraktion
 Sortieren
 ...

 Zeitaufwand für die Lösung einer Aufgabenstellung wächst mindestens exponentiell:


 Rucksackproblem
 Hamiltonkreis
 Erfüllbarkeit eines booleschen Ausdrucks in konjunktiver Normalform
 ...

42
Nichtdeterministische Turingmaschine

_ Mehrere Regeln sind in einem Zustand anwendbar


_ Rechenaufwand
_ Sequenz von Regeln
_ welche die Aufgabenstellung löst
_ Minimale Sequenz definiert den Rechenaufwand
_ Diese Maschine löst zum Beispiel das 3SAT-Problem mit einem polynomialen Aufwand
_ Lässt sich eine solche Maschine herstellen?

43
Klassen von Aufgabenstellungen - Begriffe

_ P: Polynomialer Zeitaufwand auf einer deterministischen Turingmaschine


_ NP: Polynomialer Zeitaufwand auf einer nichtdeterministischen Turingmaschine
_ NP-schwer: Problem lässt sich auf einer deterministischen Turingmaschine nicht mit polynomialen Zeitaufwand lösen.
_ NP-vollständig: Problem ist NP-schwer und lässt sich auf einer nichtdeterministischen Turingmaschine mit
polynomialen Aufwand lösen

_ NP-Vollständigkeit – Wikipedia
_ NP-Schwere – Wikipedia

44
Komplexitätsskala

NP-hard
Exponentieller
NP-complete
Zeitaufwand

Polynomialer P
Zeitaufwand

Linearer Zeitaufwand

45
Bedeutung für die Praxis

_ Vermeide
_ unlösbare Probleme
_ NP-schwere Probleme
_ Ändere ggf. die Spezifikation . . .
_ . . . oder finde einen einfach zu lösenden Spezialfall

46
Merkmale schwieriger Aufgabenstellungen

_ Unlösbare Probleme beziehen sich auf eine unendlich große Menge


_ Die Lösung von Problemen der Klasse NP-hard besteht in der Regel aus einer Vielzahl von einzelnen „Entscheidungen“,
wie zum Beispiel:
_ ganze Zahlen in einem Gleichungssystem
_ Planungsentscheidungen
_ ...

47

Das könnte Ihnen auch gefallen