Komplexitätstheorie (Einführung)

Werbung
Komplexitätstheorie (Einführung)
Probleme und Sprachen
Probleme, bei denen etwas berechnet wird, z.B.:
– konvexe Hülle
– maximale Elemente einer Punktmenge
– Schnittpunkte einer Menge von Strecken
–
(z.B. ggT)
g : ℕ* k  ℕt
*
*
–
f :Σ Σ
Optimierungsprobleme
– minimaler / maximaler Abstand in einer Punktmenge
– unabhängige Knotenmenge maximaler Kardinalität
Entscheidungsprobleme
– Ist ein gegebener Graph planar?
– Enthalten 2 Mengen die gleichen Elemente?
– Hat ein gegebener Graph eine unabhängige Knotenmenge der Größe (mindestens) k?
– Beschriftbarkeit von Landkarten mit quadratischen Labels, die an Eckpunkten befestigt sind und
gegebene Größe S haben
– Wortproblem: gegeben eine Sprache L und ein Wort w; gehört w zur Sprache L dazu?
Wir können Entscheidungsprobleme als Wortprobleme auffassen:
➔ zugehörige Sprache besteht aus allen Eingaben, kodiert als Wörter über dem Alphabet Σ, die zu einer
„JA“-Antwort führen
Unabhängige Knotenmenge
Eingabe = „Wort“: (G,k)
G , k  L ⇔ G besitzt unabhängigeKnotenmengeder Größe k
G=V={1,2 , ... , n}, E
G , k =bin n
bin n 0∪10∪1 Binärdarstellungvon n
Adjazenzmatrix
$ n Bits # _____ # _____ $
 ={0,1 , $, #}
  '={0,1}
Adjazenzmatrix mit Einträgen φ ij , für diegilt :
φij=0⇔ Kante von Knoten i nach Knoten j existiert
φij=1⇔sonst
G=V , E
V '⊆V ,∣V '∣=k
Je zwei Knoten in V ' sind nicht durch eineKante miteinanderverbunden.
Logarithmisches Kostenmaß
Zählen von nun an Kosten der Bitoperationen, z.B.:
geg: natürliche Zahlen n1 und n2, mit n1, n2≤n
Kosten:
– Addition
n1 + n2
O(log n)*
– Multiplikation:
n1 * n2
O((log n)2)
*
ergibt sich aus max.Länge, Zahl in Binärdarstellung
Geht schneller:
– Karatsenker:
– Schönlage-Straßen:
O((log n)lg3)
O(log n * loglog n)
Sprachklasse P
L∈ P g.d.w. es gibt einen Algorithmus, der Sprache L akzeptiert und dessen Laufzeit polynomiell in der
Länder der Eingabe ist, d.h. es gibt Polynom P, so dass die Laufzeit bei Eingabe w durch P ∣w∣
beschränkt ist.
Sprachklasse NP
zusätzliche Operation: choose(b)
Liefert nichtdeterministisch ein Bit, also 0 oder 1 und weist es b zu.
Algorithmus A akzeptiert nichtdeterministisch ein Wort w, falls es eine Folge von Ergebnissen von chooseAufrufen gibt, so dass A letzendlich „JA“ ausgibt.
➔ bei endlich vielen Rechnungen muss mindestens ein „JA“ ausgegeben werden, sonst wird A nicht
akzeptiert
L∈ NP g.d.w. es gibt einen nichtdeterministischen Algorithmus A, der L in polynomieller Zeit
akzeptiert, d.h. Laufzeit bei Eingabe w ist durch P ∣w∣ beschränkt, wobei P Polynom ist.
Also:
– Deterministischer Algorithmus akzeptiert Eingabe w, falls er mit „JA“ antwortet.
– Von Algorithmus A akzeptierte Sprache {w , A antwortet JA}
– Algorithmus A akzeptiert Sprache L, falls L die von A akzeptierte Sprache ist.
– Algorithmus A entscheidet Sprache L, falls A „JA“ antwortet, wenn Eingabe w∈L und mit „NEIN“,
wenn w∉L .
Macht bei der Definition von P keinen Unterschied:
Satz: Falls es einen Algorithmus A gibt, der Sprache L in Polynomialzeit akzeptiert, dann gibt es auch
einen Algorithmus A', der L in Polynomialzeit entscheidet.
Beweisskizze:
Sei c Konstante, so dass ∣w∣c Laufzeitschranke für Laufzeit von A bei Eingabe w∈L .
A' simuliert A für höchstens ∣w∣c Schritte u. sagt „NEIN“, falls A bis dahin keine Antwort
ausgegeben hat. Laufzeit von A' ist polynomiell in ∣w∣ .
KODIERUNG IST WICHTIG!
Beispiel:
Algorithmus, der bei der Eingabe k ∈ℕ eine Laufzeit von k  hat.
unäre Kodierung:
– Eingabe w mit Länge k
– Laufzeit linear, also polynomiell in ∣w∣
binäre Kodierung (diese Kodierung werden wir verwenden):
– Eingabe w der Länge ∣bink ∣=log k 
– Laufzeit exponentiell in der Länge der Eingabe:
k =2logk =2∣w∣
Sei S eine Struktur, dann bezeichnet < S > eine Kodierung von S.
Beispiel:
Sei G ein Graph, k ∈ℕ
< G,k > Kodierung der Eingabe, bspw. für unabhängige Knotenmenge (independent Set IS)
Nichtdeterministischer Algorithmus
Zusätzliche Notation
B0 | B1 Abkürzung für :
bool b;
choose(b);
if b
then B1;
else B0;
endif;
Bi -> Befehlsblock
Unabhängige Knotenmenge IS
Algorithmus (< G,k >)
G=V , E;
V '=∅;
forallv∈V
do V '=V '∪{v};| V '=V ';
endfor
if∣V '∣=k und kein Paar von Knoten∈V ' durch eineKante∈E verbundenist
then gibt JA aus
elsegib NEIN aus
endif
-> Eine Sprache L ist in Polynomialzeit verifizierbar, falls es eine Konstante c gibt und eine Sprache
B∈P , so dass gilt:
x∈L ⇔es ein y∈ * gibt ,
so dass∣y∣=∣x∣c und x , y∈B
Idee:
y≃Lösung
y heißt Zertifikat
Beispiel
Independent Set
G = (V,E)
x = < G,k >
y = < V' > , V '⊆V
mögliche Kodierung V = {v1, ... , vn}
Bit-Vektor (c1, ... , cn) mit c i ∈{ 0,1 }
ci=1⇔ vi ∈V '
bspw:
1 2 3 4 5 6 7 8 9 10 11 12
0 1 1 1 0 0 1 0 1 1 0 1
V' = {v2, v3, v4, v7, v9, v10, v12}
Zu zeigen:
∃c :∣y∣≤∣x∣c
∃c :∣y∣≤∣x∣
d.h. wir können c=1 wählen
2. (x,y) kann in Polynomialzeit getestet werden
1.
Test:
1.
∣V '∣=k
Einsen∈Bit−Vektor zählen
j=0 ;
for i=1 to n do
if c i=1 then j= j1 endif
endfor
n≤∣w∣
Beobachtung: log k∣w∣
if k = = j...
2
3
Laufzeit: O n⋅log n =O∣w∣ 
2. Unabhängige Knotenmenge
for i=1 to n do
for j=1 to n do
if  vi , v j ∈E
then return false
endif
endfor endfor
2
2
5
Laufzeit: O n ⋅∣w∣⋅log n =O∣w∣ 
Herunterladen