Skript in PDF - Theoretische Informatik - Technische Universität ...

Skript in PDF - Theoretische Informatik - Technische Universität ... Skript in PDF - Theoretische Informatik - Technische Universität ...

iti.cs.tu.bs.de
von iti.cs.tu.bs.de Mehr von diesem Publisher
18.09.2013 Aufrufe

140 KAPITEL 6. KOMPLEXITÄT VON ALGORITHMEN hat. Bemerkung 2. Wir können für die Sprache aller Palindrome eine fast doppelt so schnelle TM konstruieren, indem wir die beiden ersten Buchstaben speichern (und löschen) und sie mit den beiden letzten vergleichen (und diese dann auch löschen). Eine noch schnellere TM würde drei (oder vier usw.) Buchstaben auf einmal vergleichen. Wir können also eine fast k-mal schnellere TM für ein beliebig großes k konstruieren. Wir beobachten, dass jede dieser TM eine Zeitkomplexität hat, die von einem quadratischen Polynom repräsentiert wird. Den gleichen Beschleunigungsprozess können wir mit jeder TM machen, indem wir stets in einem Schritt k Felder gleichzeitig lesen und bearbeiten. Aus diesem Grund ist nicht die Funktion t(n) selbst interessant, nur die ” Geschwindigkeit des Wachstums“ von t(n), also die Klasse O(t(n)). Definition. Wir bezeichnen mit P die Klasse aller formalen Sprachen, die von einer TM mit polynomialer Zeitkomplexität akzeptiert werden können. Genauer: eine Sprache L gehört zur Klasse P, falls es eine Turingmaschine M und ein Polynom p(n) gibt, so dass L = L(M) und M hält auf Eingaben der Länge n in höchstens p(n) Schritten. Bemerkung 3. Erinnern wir uns daran, dass Entscheidungsproblem ≡ formale Sprache. Genau genommen müssen wir ein Entscheidungsproblem erst codieren (z.B. binär, mit Symbolen 0 und 1). Dann bezeichnet L ⊆ {0, 1} ∗ die Sprache aller Codierungen der Eingaben, auf die die Entscheidung JA ist. Weiter nehmen wir immer an, dass die Codierung von Problemen ” vernünftig“ ist. Wenn nämlich jemand freiwillig eine extrem lange Codierung der Eingabe benutzt, kann er auch ein kompliziertes Problem in linearer Zeit p(n) = n, wobei n die ” unvernünftige“ Codelänge ist, lösen. Die folgenden Regeln sind als ” vernünftig“ anzusehen: 1. Zahlen werden binär oder dezimal repräsentiert. (Nicht unär!) 2. Graphen werden durch Adjazenzmatrizen oder Adjazenzlisten dargestellt (siehe Abschnitt 6.1). 3. Mengentheoretische Operationen (Insert, Delete, Vereinigung, Durchschnitt) werden so implementiert, dass ihre Ausführung eine konstante Zahl von Zeiteinheiten dauert. Beispiel 3 (PALINDROM). Die Entscheidung, ob ein Wort ein Palindrom ist, ist ein Problem der Klasse P, denn die TM aus Beispiel 2 hat die Zeitkomplexität O(n 2 ). Beispiel 4 (2-FÄRBUNG). Das Problem, ob ein Graph mit zwei Farben gefärbt werden kann, gehört zur Klasse P. In Abschnitt 6.1 haben wir dafür einen Algorithmus mit linearer Zeitkomplexität beschrieben. Es ist nicht kompliziert, den Algorithmus mit einer TM zu implementieren und zu beweisen, dass diese TM polynomiale Zeitkomplexität hat.

6.2. KOMPLEXITÄTSKLASSE P 141 Beispiel 5 (2-ERFÜLLBARKEIT und 3-ERFÜLLBARKEIT). Analog zu der Situation der 2-Färbung und 3-Färbung haben wir hier ein anderes wichtiges Beispiel der Probleme, deren leichtere Variante zu P gehört und deren schwierige (wahrscheinlich) nicht. Es handelt sich um Boolesche Formeln über den Variablen x1, . . .,xn. Die einfachsten Formeln sind die Variablen xi selbst und ihre Negationen ¬xi - diese Formeln heißen Literale. Die komplizierteren Formeln werden mit Hilfe der üblichen logischen Operationen, z.B. Konjunktion ∧, Disjunktion ∨ und Implikation → erzeugt. Jede Disjunktion von Literalen heißt Klausel. Beispiele: x ∨ y ∨ ¬z und ¬x. Jede Boolesche Formel phi hat eine konjunktive Normalform (KNF), d.h., φ = φ1 ∧φ2 ∧ · · · ∧φn ist eine Konjunktion der Klauseln φ1, . . . , φn. Z.B. hat die Formel φ = (x → y ∧ z) ∧ (¬x → ¬z) die folgende KNF: wir benutzen die Äquivalenz von und erhalten a → b und ¬a ∨ b φ = (¬x ∨ (y ∧ z)) ∧ (x ∨ ¬z) Da ¬x ∨ (y ∧ z) äquivalent zu (¬x ∨ y) ∧ (¬x ∨ z) ist (de Morgansches Gesetz), gilt φ = (¬x ∨ y) ∧ (¬x ∨ z) ∧ (x ∨ ¬z). Das ist also eine Boolesche Formel, deren Klauseln je zwei Literale enthalten. Eine Formel φ heißt erfüllbar, falls die Variablen so mit true oder false belegt werden können, dass φ den Wert true annimmt. Beispiel: die obige Formel ist erfüllbar, denn für x = true, y = true, z = true gilt φ = true. Es ist kein effizienter Algorithmus bekannt, der für jede Boolesche Formel unterscheidet, ob sie erfüllbar ist. Das Problem m-ERFÜLLBARKEIT ist: Gegeben, eine Boolesche Formel φ in konjunktiver Normalform, wobei jede Klausel m Literale enthält, ist φ erfüllbar? Wir definieren die Größe der Eingabe φ als n + k, wobei n die Anzahl aller Variablen und k die Anzahl aller Klauseln von φ ist. 2-ERFÜLLBARKEIT gehört zur Klasse P. Wir könnten hier einen effizienten Algorithmus angeben, aber einfacher ist es zu zeigen (in Abschnitt 6.3), dass es eine effiziente Reduktion dieses Problems auf ein anderes Problem der Klasse P gibt – daraus folgt dann indirekt, dass 2-ERFÜLLBARKEIT zur Klasse P gehört. 3-ERFÜLLBARKEIT ist dagegen schwierig: in Abschnitt 6.4 zeigen wir, dass dieses Problem N P-vollständig ist, also genauso schwierig wie 3-FÄRBUNG. Beispiel 6 (UNIVERSALITÄT REGULÄRER AUSDRÜCKE). Das ist ein (rares) Beispiel eines leicht zu formulierenden Problems, für das bewiesen wurde, dass es nicht effizient lösbar ist. Reguläre Ausdrücke haben wir in Kapitel 1 eingeführt: sie werden aus Buchstaben des Alphabets Σ, z.B. Σ = {a, b}, und Symbolen ∅ und ɛ mit Hilfe der Operatoren +, ·, und ∗ erzeugt. Jetzt arbeiten wir mit komprimierter Notation: statt xx . . . x (n-mal) schreiben wir x ↑ n (n binär), z.B. xxxxx = x ↑ 101

140 KAPITEL 6. KOMPLEXITÄT VON ALGORITHMEN<br />

hat.<br />

Bemerkung 2. Wir können für die Sprache aller Pal<strong>in</strong>drome e<strong>in</strong>e fast doppelt<br />

so schnelle TM konstruieren, <strong>in</strong>dem wir die beiden ersten Buchstaben speichern<br />

(und löschen) und sie mit den beiden letzten vergleichen (und diese dann auch<br />

löschen). E<strong>in</strong>e noch schnellere TM würde drei (oder vier usw.) Buchstaben auf<br />

e<strong>in</strong>mal vergleichen. Wir können also e<strong>in</strong>e fast k-mal schnellere TM für e<strong>in</strong> beliebig<br />

großes k konstruieren. Wir beobachten, dass jede dieser TM e<strong>in</strong>e Zeitkomplexität<br />

hat, die von e<strong>in</strong>em quadratischen Polynom repräsentiert wird.<br />

Den gleichen Beschleunigungsprozess können wir mit jeder TM machen, <strong>in</strong>dem wir<br />

stets <strong>in</strong> e<strong>in</strong>em Schritt k Felder gleichzeitig lesen und bearbeiten. Aus diesem Grund<br />

ist nicht die Funktion t(n) selbst <strong>in</strong>teressant, nur die ” Geschw<strong>in</strong>digkeit des Wachstums“<br />

von t(n), also die Klasse O(t(n)).<br />

Def<strong>in</strong>ition. Wir bezeichnen mit<br />

P<br />

die Klasse aller formalen Sprachen, die von e<strong>in</strong>er TM mit polynomialer Zeitkomplexität<br />

akzeptiert werden können. Genauer: e<strong>in</strong>e Sprache L gehört zur Klasse P, falls<br />

es e<strong>in</strong>e Tur<strong>in</strong>gmasch<strong>in</strong>e M und e<strong>in</strong> Polynom p(n) gibt, so dass<br />

L = L(M)<br />

und M hält auf E<strong>in</strong>gaben der Länge n <strong>in</strong> höchstens p(n) Schritten.<br />

Bemerkung 3. Er<strong>in</strong>nern wir uns daran, dass<br />

Entscheidungsproblem ≡ formale Sprache.<br />

Genau genommen müssen wir e<strong>in</strong> Entscheidungsproblem erst codieren (z.B. b<strong>in</strong>är,<br />

mit Symbolen 0 und 1). Dann bezeichnet L ⊆ {0, 1} ∗ die Sprache aller Codierungen<br />

der E<strong>in</strong>gaben, auf die die Entscheidung JA ist. Weiter nehmen wir immer an, dass<br />

die Codierung von Problemen ” vernünftig“ ist.<br />

Wenn nämlich jemand freiwillig e<strong>in</strong>e extrem lange Codierung der E<strong>in</strong>gabe benutzt,<br />

kann er auch e<strong>in</strong> kompliziertes Problem <strong>in</strong> l<strong>in</strong>earer Zeit p(n) = n, wobei n die<br />

” unvernünftige“ Codelänge ist, lösen. Die folgenden Regeln s<strong>in</strong>d als ” vernünftig“<br />

anzusehen:<br />

1. Zahlen werden b<strong>in</strong>är oder dezimal repräsentiert. (Nicht unär!)<br />

2. Graphen werden durch Adjazenzmatrizen oder Adjazenzlisten dargestellt (siehe<br />

Abschnitt 6.1).<br />

3. Mengentheoretische Operationen (Insert, Delete, Vere<strong>in</strong>igung, Durchschnitt)<br />

werden so implementiert, dass ihre Ausführung e<strong>in</strong>e konstante Zahl von Zeite<strong>in</strong>heiten<br />

dauert.<br />

Beispiel 3 (PALINDROM). Die Entscheidung, ob e<strong>in</strong> Wort e<strong>in</strong> Pal<strong>in</strong>drom ist, ist<br />

e<strong>in</strong> Problem der Klasse P, denn die TM aus Beispiel 2 hat die Zeitkomplexität<br />

O(n 2 ).<br />

Beispiel 4 (2-FÄRBUNG). Das Problem, ob e<strong>in</strong> Graph mit zwei Farben gefärbt<br />

werden kann, gehört zur Klasse P. In Abschnitt 6.1 haben wir dafür e<strong>in</strong>en Algorithmus<br />

mit l<strong>in</strong>earer Zeitkomplexität beschrieben. Es ist nicht kompliziert, den<br />

Algorithmus mit e<strong>in</strong>er TM zu implementieren und zu beweisen, dass diese TM polynomiale<br />

Zeitkomplexität hat.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!