@ TECHNISCHE UNIVERSITÄT CAROLO-WILHELMINA ZU BRAUNSCHWEIG Institut für Theoretische Informatik Dr. S. Milius Braunschweig, 27. Mai 2009 Theoretische Informatik 2, SS 2009 Lösungshinweise zur Übungsaufgabe von Aufgabenblatt Nr. 9 Aufgabe 30 Wiederholung: Klasse NP Zur Erinnerung: Es war unser Ziel alle entscheidbaren Probleme in (prinzipiell) leicht“ und schwer“ ” ” lösbare Probleme einzuteilen. Zuletzt hatten wir die Klasse P der leicht“ lösbaren Probleme kennengelernt. Das sind diejenigen Pro” bleme die von einem Algorithmus in polynomialer Zeit gelöst werden. Was soll aber nun schwer“ lösbar (formal) heißen? Man benötigt einen formalen Begriff, der aussagt, ” dass für ein Problem kein effizienter Algorithmus existiert. Dies ist der Begriff der NP-Vollständigkeit, den wir beim nächsten Mal kennenlernen. Zunächt brauchen wir aber noch eine Umgebung, in der die schweren“ und leichten“ Probleme beide ” ” vorkommen. Diese Umgebung soll den Problemen, die wir betrachten gewisse Einschränkungen auferlegen. Wir einigen uns darauf, dass wir (zunächst) nur Probleme betrachten wollen, von denen es effizient entscheidbar ist, ob eine vorgelegte (potentielle) Lösung einer Probleminstanz auch tatsächlich eine Lösung ist. Dies führt uns zur Klasse NP: Definition. Die Klasse NP besteht aus denjenigen formalen Sprachen L, für die eine nichtdeterministische Turingmaschine (NTM) M und ein Polynom p(n) existiert, so dass L = L(M ) gilt und M auf jede Eingabe der Länge n nach höchstens p(n) Berechnungsschritten hält. Zur Erinnerung: Nichtdeterminismus bei Turing-Maschinen kann man sich wie folgt vorstellen: bei einem nichtdeterministischen Berechnungsschritt errät“ eine NTM den richtigen nächsten Schritt und kann ” so Zeit sparen. Die Simulation der NTM durch eine DTM muss hingegen jeden möglichen Folgeschritt durchprobieren, was zu einer exponentiellen Verlangsamung führt. Eigenschaften: • P ⊆ NP • für jedes Problem aus NP existiert ein deterministischer Algorithmus mit exponentieller Laufzeit, d. h. die Laufzeit ist in O(K p(n) ) wobei K ∈ N gilt und p(n) ein Polynom ist. Im Folgenden werden wir nun Abschlusseigenschaften von P und NP betrachten. Lösung der Aufgabe Es sei L ⊆ Σ∗ eine Sprache aus P. Wir zeigen, dass L∗ ebenfalls in P liegt. Behauptung: Die Maximalzahl der nichtleeren Teilwörter1 eines Wortes der Länge n ist gegeben durch P i≤n i = n(n + 1)/2. Beweis: Der Summand i liefert die Anzahl der Teilwörter der Länge n + 1 − i: es gibt n Teilwörter der Länge 1 (nämlich s1 , . . . , sn ), n − 1 Teilwörter der Länge 2 (nämlich s1 s2 , s2 s3 , . . . sn−1 sn ), usw. und schließlich 1 Teilwort der Länge n (nämlich w = s1 · · · sn selbst). 2 Es sei nun w = s1 s2 · · · sn ein beliebiges Wort aus Σ∗ . Wir wollen entscheiden, ob w in L∗ liegt. Falls w = ε gilt, ist natürlich sofort w ∈ L∗ wahr. Anderenfalls führt unser Algorithmus grundsätzlich die folgenden zwei Schritte durch: 1. Teste systematisch alle n(n + 1)/2 nichtleeren Teilwörter von w auf Zugehörigkeit zu L. Dies liefert die Relation Z auf der Menge der Zahlen 0 ≤ k ≤ |w| mit iZj ⇔ i < j und si+1 si+2 · · · sj ∈ L. 2. Berechne die transitive Hülle Z ∗ von Z. Da L in P liegt, kann der erste Schritt mit Hilfe eines deterministischen Algorithmus für L durchgeführt werden. Weiterhin überlegen wir, was es bedeutet, dass iZ ∗ j gilt. Nach der Definition der transitiven Hülle bedeutet dies, dass es m ≥ 0 Zahlen k1 , . . . , km , 0 ≤ i < k1 < k2 < · · · < km < j gibt mit iZk1 Zk2 Z · · · Zkm Zj . 1 Unter einem Teilwort des Wortes s1 s2 · · · sn verstehen wir hier jedes Wort si si+1 · · · sj mit 1 ≤ i ≤ j ≤ n. 1 Letzte Änderung: 27. Mai 2009 Theoretische Informatik 2, SS 2009 Setzt man die Definition von Z ein bedeutet, dies, dass die Teilwörter si+1 · · · sk1 , sk1 +1 · · · sk2 , sk2 +1 · · · sk3 , ... skm +1 · · · sj Wörter aus L sind. Das heißt es existiert eine Zerlegung des Teilwortes si+1 · · · sj von w in nichtleere Wörter aus L. Das ist genau dann der Fall, wenn dieses Teilwort in L∗ liegt. Es gilt also 0Z ∗ n genau dann, wenn w = s1 · · · sn in L∗ liegt. Wir vereinbaren, dass die Relation Z durch ihre Adjazenzmatrix gespeichert wird. Diese (|w| + 1) × (|w| + 1)-Matrix nennen wir ebenfalls Z. In Schritt 2 berechnen wir darüberhinaus die reflexive und transitive Hülle von Z. Dies läßt sich effizient mittels Matrixoperationen durchführen, und es macht in unserem Fall keinen Unterschied, da wir nur an Z0,n interessiert sind. In dem folgenden Algorithmus sind die Matrix-Operationen nicht die üblichen Operationen von Zahlen sondern wie folgt zu verstehen: jede Addition zwischen Elementen ist die or-Operation auf Bits und jede Multiplikation die and-Operation. Also gilt für zwei Matrizen A und B: |w|+1 (A + B)i,j = Ai,j ∨ Bi,j (A · B)i,j = _ Ai,k ∧ Bk,j k=1 Wir nehmen an, dass M eine deterministische TM ist, die L in der polynomialen Zeit p(n) entscheidet. Der folgenden Algorithmus entscheidet, ob w ∈ L∗ gilt: 1. Falls w = ε, anhalten und w akzeptieren. 2. Die Matrix Z wird berechnet: für jedes nichtleere Teilwort si+1 · · · sj , 0 ≤ i < j ≤ |w| von w wird die Maschine M auf si+1 · · · sj simuliert und das Ergebnis in Zi,j vermerkt. 3. Die reflexive und transitive Hülle Z ∗ von Z wird berechnet: Z ∗ = Z [n] wobei gilt Z [0] Z := := [i+1] Z +∆ Z · Z [i] Hierbei ist ∆ natürlich die Einheitsmatrix und die Matrix-Operationen sind die oben beschriebenen Boole’schen Operationen. ∗ = 1 gilt. 4. Halten und w akzeptieren falls Z0,n Korrektheit. Nach Schritt 1 haben wir die (|w| + 1) × (|w| + 1)-Matrix Z mit ½ 1 falls i < j und das Teilwort von Position i + 1 bis Position j zu L gehört Zi,j = 0 sonst Für die reflexive, transitive Hülle Z ∗ von Z gilt ½ 1 falls das Teilwort von Position i + 1 bis Position j zu L∗ gehört ∗ Zi,j = 0 sonst ∗ Falls also Z0,n = 1 gilt, liegt w = s1 · · · sn in L∗ . Laufzeit. Die Sprache L liegt in P und kann daher in polynomialer Zeit p(n) entschieden werden. Falls also p(n) die Zeitkomplexität zum Entscheiden von L ist, benötigt der zweite Schritt höchstens O(n2 ·p(n)) Schritte. Schritt 3 benötigt O(n) Schritte, um Z [0] zu berechnen und jede der n Matrixmultiplikationen benötigt O(n3 ) Schritte. Die Berechnung von Z ∗ erfolgt somit in O(n · n3 ) Schritten. Da alle anderen Schritte in konstanter Zeit durchführbar sind ist die Laufzeit somit in O(n4 ) und daher polynomial. Hinweis: Ein alternativer Algorithmus zur Berechnung der transitiven Hülle ist der Floyd-WarshallAlgorithmus mit einer Zeitkomplexität von Θ(n3 ) (siehe: Cormen, Leiserson, Rivest: Introduction to Algorithms, MIT Press). 2