Theoretische Informatik – Mitschrift

Werbung
Theoretische Informatik – Mitschrift
10. Komplexitätstheorie
Klassifikation algorithmischer Probleme (formalisiert als Sprachen) nach ihrem Bedarf an
Berechnungsressourcen (= Rechenzeit, Speicherplatz – als Funktion der Eingabelänge).
Ziele:
●
●
Entwicklung effizienter Verfahren
Nachweis von oberen und unteren Schranken für die Komplexität von Problemen
Beispiel:
CYK-Algorithmus: O(n3) ist obere Schranke für die Zeitkomplexität des Wortproblems für
kontextfreie Sprachen.
DFA: O(n) obere Schranke bei regulären Sprachen
Nachweis unterer Schranken schwierig, weil Aussage für alle Algorithmen, die das Problem lösen,
gelten muss.
Beispiel:
Vergleichsbasiertes Sortieren: Ω(n log n)
10.1 Die O-Notation
Vergleich von Funktionen bezüglich ihres Wachstums
Definition 10.1:
Sei f , g : ℕℕ. O g :={ f ∣∃c0∃n 0≥0 ∀ n≥n0 : f n≤c⋅g n}
Sprechweise: f ist von der Ordnung g, falls f ∈O  g .
 g :={ f ∣∃c0 ∃n 0≥0 ∀ n≥n0 f n≥c⋅g n}
1
 g :={ f ∣∃c0 ∃n0 ≥0 ∀ n≥n0 g n≤ f n≤c⋅g n}
c
Schreibweise:
O g n statt O g 
O f =O g  , falls O f ⊆O g 
O f O g  , falls O f ⊂O g 
Regeln:
f 1∈O  g 1 , f 2 ∈O g 2 ⇒ f 1 f 2 ∈O 
max {g 1 , g 2 }
argumentweise
f 1∗ f 2 ∈O g 1∗g 2 
Satz 10.1:
k
Eine Polynomfunktion p n=∑ ai nk vom Grad k hat die Ordnung O n k .
i=0
Beweis (Induktion über k):
k =0: p n=a 0 ⇒ p∈O 1
k
k k 1 : p n=a
∑ a i n k ⇒ Ordnung O max {nk 1 , n k }=O n k1 q.e.d.
k1 n

k1
O n
k1
i=0


k
IV: O  n 
Wichtige Beispiele:
O1⊂O log n⊂O n⊂On log n⊂On 2 ⊂...⊂O
n k  ...⊂O2 n

k≥3
10.2 Komplexität von Algorithmen
hier nur: Zeitkomplexität
Algorithmen als Turingprogramme für Mehrband-Turingmaschine TMk(Σ)
Zeit = Anzahl Schritte der Turingmaschine
Platz = Anzahl besuchte Felder der Turingmaschine
Definition 10.2:
Sei  ∈TM k   Mehrband-Turingmaschine. Definiere time  :  *  ℕ∪{∞} durch:
{
l
├  q ,...} mit q , ... hat keine Folgekonfiguration
falls  bei Eingabe von w stoppt
Anfangskonfiguration
min {l∣
time   w:=
x 0 w

bei Eingabe w
∞
sonst
Bemerkung:
● Mehrband-Turingmaschine mit Rechenzeitbeschränkung f(n) kann durch eine EinbandTuringmaschine mit Beschränkung f(n)2 simuliert werden
● alternative Berechnungsmodelle möglich
→ Abschätzung der Rechenzeit der Anweisungen
→ verschiedene Kostenmaße
■ uniformes Kostenmaß
Kosten pro atomarer Anweisung ≡1
nur realistisch bei Beschränkung der Speicherplatznforderung pro Datum
Beispiel:
P=in  X 1  ; var  X 2  ;
X 2 :=2 ; loop X 1  X 2 := X 2∗X 2 ; X 1 :=X 2 ;
out X 1
n
P berechnet n 2 2
uniformes Kostenmaß: O n, aber wir benötigen 2n Bits zur Darstellung des Ergebnisses
⇒alternativ: logarithmisches Kostenmaß
Berücksichtigung der Länge der Dualdarstellung der Variablenwerte
im obigen Beispiel: O 2n .
10.3 Die Klassen P und NP
Definition 10.3:
Sei f : ℕℕ.
TIME  f n :={L⊆ *∣∃ ∈DTM   : L= L   und ∀ w∈ * : time  w≤ f ∣w∣}
P=
∪
p Polynom
TIME  p n enthält die von deterministischen Turingmaschinen in Polynomzeit
erkennbaren Sprachen. Für P kann man Einband-Turingmaschine betrachten, weil Polynome
unter Quadrieren abgeschlossen sind. P umfasst die Probleme/Sprachen, für die effiziente
Algorithmen existieren. Algorithmen mit exponentieller Komplexität O 2 n , O nlog n  sind nicht
effizient.
P⊆Klasse der Sprachen, deren charakteristische Funktion LOOP -berechenbar ist.
Beispiel:
MST : Bestimmung eines einen beliebigen Graphen aufspannenden Baumes mit minimalem
Gewicht.
Graph G=V , E , w mit Knotenmenge V (vertices), Kantenmenge E⊆V ×V (edges)
und Gewichtsfunktion w : E ℕ
Beispiel:
1●
7
●2
2
6
6●
1
5
3
4
5●
8
2
●4
●3
V ={1 , 2 , ... ,6}
E={6,1 , 1,2 ,...}
6,1 7
w : 1,2 6
3,21
...
{
Aufspannender Baum von G: T ⊆E , so dass gilt:
● (V, T) ist zusammenhängender, azyklischer Teilgraph von G
minimal aufspannender Baum (MST – minimal spanning tree):
∑ w e  ist minimal unter allen aufspannenden Bäumen T
e∈T
Kruskal-Algorithmus:
● Verwalte die Menge S von disjunkten Teilbäumen von G, die alle Knoten zusammen
genommen umfassen. Zu Beginn sei S = V.
Solange S mehr als einen Baum enthält, wiederhole:
○ Wähle eine Kante minimalen Gewichts, die zwei Bäume t1 und t2 aus S verbindet
○ Lösche t1 und t2 aus S und füge den Baum, der aus t1 und t2 und der Kante besteht, zu S
hinzu.
 MST ∈ P : Algorithmus Kruskal
∣V∣=n ,∣E∣=e , Aufwand: O e log en
Definition 10.4:
Sei f : ℕℕ .
NTIME  f n={L⊆ *∣∃TM k    : L=L   und ∀ w ∈ * : time  w≤ f ∣w∣}
NP :=∪Polynome p NTIME  p n
"die von nichtdeterministischer Turingmaschine in Polynomialzeit entscheidbaren Sprachen"
Offenes Problem (seit 1970 bekannt):
P=NP oder P ⊂NP ?
Beispiel:
TSP-Problem: Traveling Salesman Problem
Gegeben: G = (V, E, w) wie beim MST-Problem. Gesucht wird ein Kreis in G, der alle Knoten
umfasst und dessen Kantengewicht minimal ist. Jeder Knoten soll exakt einmal besucht werden.
→ Hamiltonscher Kreis
●
1
●
4
3
●
6
●
5
2
●
●
7
8
Obige Formulierung: Optimierungsproblem
→ Entscheidungsproblem (ja/nein-Problem)
Füge Obergrenze k für Kantengewicht des Kreises hinzu und frage:
Gibt es einen Kreis mit Kantengewicht ≤ k?
Für das TSP ist kein Algorithmus bekannt, der wesentlich besser ist als der folgende:
1. Zähle systematisch alle Folgen v1 v2 ... vn von Knoten in G auf, die jeden Knoten genau
einmal enthalten
n
n
⇒O n !  Es gilt n !~
2  n
e
c⋅n
Dies übersteigt für jede Konstante c schließlich 2 .
2. Teste, ob es sich bei einer Knotenfolge v1 v2 ... vn um einen Kreis handelt und das
Knotengewicht unterhalb der Obergrenze liegt
⇒O n

Eine nichtdeterministische Turingmaschine kann Folgen v1 ... vn erraten und dann in Polynomzeit
feststellen, ob es sich um eine Lösung handelt. ⇒TSP ∈ NP
Charakteristisch für NP-Probleme:
● exponentiell großer Suchbaum für Lösungen
→ nichtdeterministische Auswahl
● polynomieller Aufwand für die Feststellung, ob eine Lösung gefunden wurde
→ Cook 1971, Karp 1972: Strukturtheorie für P-NP-Probleme: „NP-Vollständigkeit“
Bis auf wenige Ausnahmen sind NP-Probleme, für die kein polynomieller Algorithmus bekannt ist
(→ Kandidaten für NP \ P), so miteinander verknüpft, dass
● entweder alle Probleme polynomielle Algorithmen besitzen (→ P = NP)
● oder keines (→ P ≠ NP)
10.4 NP-Vollständigkeit
Definition 10.5:
Sei A , B⊆ *. A heißt auf B polynomiell reduzierbar, in Zeichen A≤p B , falls es eine totale
und in Polynomzeit berechenbare Funktion f :  *  * gibt, so dass
∀ w∈ * : w ∈A⇔ f w∈B.
Lemma:
●
●
●
A≤p B∧B ∈P ⇒ A∈P
A≤p B∧B∈ NP ⇒ A∈ NP
≤p ist transitiv.
Beweis:
→ Übung
Definition 10.6:
Sei A⊆ *.
(i) A heißt NP-hart, falls für alle L∈NP gilt: L≤p A.
(ii) A heißt NP-vollständig, falls A∈NP und A NP-hart.
Satz 10.2:
Sei A NP-vollständig. Dann gilt: A∈P ⇔ P=NP .
Satz 10.3 (Cook):
Das Erfüllbarkeitsproblem der Aussagenlogik
SAT ={code  F ∣F ist erfüllbare Formel der Aussagenlogik } ist NP-vollständig.
Beispiel:
Aussagenlogische Variablen: A , B , C ,... ¬ A∧ B∨C 
Junktoren: ∧,∨, ¬
Die Belegung { A false , Btrue , C ...} erfüllt die Formel.
}
Beweisidee:
SAT ∈ NP ist einfach zu zeigen:
Rate Belegung der aussagenlogischen Variablen } exponentiell viele
und teste, ob Belegung die Formel wahr macht } einfach
Hauptteil des Beweises von Satz 10.3: Nachweis der NP -Härte
Zeige für jedes L∈ NP : L≤p SAT
Konstruiere eine aussagenlogische Formel F , so dass gilt: w ∈L⇔ F erfüllbar
⇒1. NP -vollständiges Problem
Nachweis der Existenz weiterer NP-vollständiger Probleme erfolgt mittels Reduktion und ist daher
einfacher.
Satz 10.4:
SAT ≤ p 3SAT
3SAT:
Aussagenlogische Formel in konjunktiver Normalform
F =a 11∨...∨a 1 i ∧...∧ a k1∨...∨a k i , wobei jedes a i j aussagenlogische Variable X i j oder
negierte aussagenlogische Variable ¬ X i j ( a i j ist Literal) mit i j≤3 für alle 1≤ j≤k
⇒3SAT : Ist F erfüllbar?
1
k
Beweis:
Zeige, wie beliebige Formel der Aussagenlogik mit polynomiellen Aufwand in
erfüllbarkeitsäquivalente 3-SAT-Formel F' transformiert werden kann:
Erfüllbarkeitsäquivalenz: F erfüllbar ⇔ F ' erfüllbar schwächer als logische Äquivalenz
1. Schritt Bringe alle Negationszeichen mit De Morgan zu den Variablen
¬ F ∨G~¬F ∧¬G∣¬ F ∧G~¬ F ∨¬G
Beispiel:
F =¬¬ X 1∨¬ X 3∨ X 2 ⇒ X 1∨¬ X 3 ∧¬ X 2 ⇒ Baumdarstellung
y0 ∧
Blätter = Literale, innere Knoten = ∨/∧-Verknüpfungen
y1 ∨
¬X 2
X1
¬X3
2. Schritt Ordne inneren Baumknoten neue Variablen aus {y0, y1, ...} zu, beginnend mit der
Wurzel
3. Schritt Erzeuge zu jedem Teilbaum
op y i
die Formel y i ⇔v op z
v
z
im Beispiel:
y 0 ⇔ y1∧¬ x 2
y1 ⇔ x 1∨¬ x 3
Bilde neue Formel F ≡ y 0∧ y 0 ⇔...∧ y1 ⇔...... y k ⇔...
im Beispiel:
y 0∧ y 0 ⇔ y 1∧¬x 2 ∧ y 1 ⇔ x 1∨¬x 3 
Es gilt: F erfüllbar ⇔ F ist erfüllbar.
4. Schritt Transformiere y ⇔ u op z in KNF y  u op z ∧u op z  y
¬ y∨u op z ∧¬u op z ∨ y
im Beispiel:
y 0 ⇔ y1∧¬ x 2 ⇔¬ y 0∨ y1∧¬ x 2 ∧¬ y 1∧¬ x 2 ∨ y 0
Herunterladen