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∪10∪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 ∣bink ∣=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= j1 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∣