Theoretische Informatik 2, SS 2009

Werbung
@
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
Herunterladen