Theoretische Informatik Prof. Dr. Juraj Hromkovič http://www.ita.inf.ethz.ch/theoInf17 Departement Informatik Lösungsvorschläge – Blatt 3 Zürich, 13. Oktober 2017 Lösung zu Aufgabe 7 Der folgende endliche Automat akzeptiert die Sprache L = {x ∈ {0, 1}∗ | x enthält das Teilwort 0101} . 1 qλ 0, 1 0 0 q0 1 q01 1 0 q010 1 q0101 0 Für jedes Wort x ∈ {λ, 0, 01, 010} beschreibt qx das längste aktuell gelesene Präfix des gesuchten Musters 0101. Im Zustand q0101 wurde das gesuchte Muster bereits gefunden. Der Startzustand ist der Zustand qλ . Damit ergeben sich die folgenden Klassen für die Zustände: Kl[q0101 ] = L , Kl[q010 ] = {x ∈ {0, 1}∗ | x endet mit 010} − L , Kl[q01 ] = {x ∈ {0, 1}∗ | x endet mit 01} − L , Kl[q0 ] = {x ∈ {0, 1}∗ | x endet mit 0} − (L ∪ Kl[q010 ]) , Kl[qλ ] = {0, 1}∗ − [ Kl[qx ] . x∈{0,01,010,0101} Man beachte, dass es hilfreich sein kann, die Reihenfolge der Klassenbeschreibungen geschickt zu wählen. Lösung zu Aufgabe 8 Der folgende endliche Automat akzeptiert die Sprache L = {xcy ∈ {a, b, c}∗ | x, y ∈ {a, b}∗ und |x|a mod 3 = 2 und |xy|b ist gerade} . a a a q0,g b a q1,g b b c q2,g b b qg c b b b a q0,u a q1,u a c q2,u qu c c c c c a qS a, b, c In diesem Automaten modellieren die Zustände qi,x für i ∈ {0, 1, 2} und x ∈ {g, u} einen Zähler, der die Anzahl i der bisher gelesenen Buchstaben a modulo 3 zählt und gleichzeitig speichert, ob die Anzahl bisher gelesener Buchstaben b gerade (g) oder ungerade (u) ist. Mit dem Lesen eines Buchstaben c geht der Automat dann entweder in einen der Zustände qu oder qg über, falls die Anzahl bisher gelesener as die Bedingung von L erfüllt, oder in den Senkenzustand qS . In dem zweiten Teil des Wortes hinter dem c muss nur noch die Parität der Anzahl von bs überprüft werden, dies geschieht mit den Zuständen qu und qg . Wird ein weiteres c gelesen, geht der Automat in den Senkenzustand über. Damit ergeben sich die folgenden Klassen für die Zustände: Kl[qi,g ] = {x ∈ {a, b}∗ | |x|a mod 3 = i und |x|b gerade} für i ∈ {0, 1, 2} , Kl[qi,u ] = {x ∈ {a, b}∗ | |x|a mod 3 = i und |x|b ungerade} für i ∈ {0, 1, 2} , Kl[qg ] = L , Kl[qu ] = {xcy | x, y ∈ {a, b}∗ , |x|a mod 3 = 2 und |xy|b ungerade} , Kl[qS ] = {a, b, c}∗ − [ Kl[q] . q∈Q−{qS } Lösung zu Aufgabe 9 Die in der Aufgabenstellung gegebene Sprache L lässt sich schreiben als L = L1 ∪ L2 mit L1 = {w ∈ {a, b}∗ | (|w|a + 2|w|b ) mod 3 = 1} , L2 = {w ∈ {a, b}∗ | w enthält das Teilwort abb und beginnt mit a} . Für die Sprache L1 lässt sich der folgende Automat A1 konstruieren: a a q0 a q1 b q2 b b Dieser Automat zählt in seinen Zuständen die Anzahl von as und bs modulo 3 gemäss der Formel aus L1 . Es gilt für i ∈ {0, 1, 2}, dass Kl[qi ] = {w ∈ {a, b}∗ | (|w|a + 2|w|b ) mod 3 = i} . Für die Sprache L2 lässt sich der folgende Automat A2 konstruieren: pS a, b b p0 a pa a a b pab b pabb a, b Dieser Automat prüft in seinem Startzustand p0 zunächst, ob das Wort mit einem a beginnt. Falls nicht, geht er in den Senkenzustand pS über, sonst in den Zustand pa . Die Zustände pa , pab und pabb geben an, welches längste Präfix des gesuchten Musters aktuell gelesen wurde. Sobald das Muster gefunden wurde, verbleibt der Automat im akzeptierenden Zustand pabb . Damit ergeben sich die folgenden Klassen: Kl[p0 ] = {λ} , Kl[pS ] = {bx | x ∈ {a, b}∗ } , Kl[pabb ] = L2 , Kl[pab ] = {x ∈ {a, b}∗ | x beginnt mit a und endet mit ab} − L2 , Kl[pa ] = {x ∈ {a, b}∗ | x beginnt und endet mit a} − L2 . Mit der Methode des modularen Entwurfs kann man nun aus A1 und A2 den folgenden Produktautomaten A konstruieren, der die Sprache L = L1 ∪ L2 akzeptiert. Zur einfacheren Darstellung verwenden wir die Notation rx,y = hqx , py i. Weil dies ein Produktautomat für die Vereinigung von zwei Sprachen ist, sind alle Zustände akzeptierend, die einen akzeptierenden Zustand aus einem der beiden Teilautomaten enthalten, also die zu q1 gehörige Spalte und die zu pabb gehörige Zeile. Man beachte, dass die Zustände r0,1 und r0,2 vom Startzustand aus nicht erreichbar sind. Diese beiden Zustände können deshalb auch weggelassen werden. b a q0 a q1 b q2 b a a b pS a, b a rS,0 rS,1 b a rS,2 b b b b b r0,0 p0 r0,1 r0,2 a a a a pa a a ra,0 a ra,1 a ra,2 a a b b a b pab rab,0 b rab,1 a rab,2 b b pabb b b a, b a rabb,0 a rabb,1 b rabb,2 b a b Lösung zu Bonus-Aufgabe 1 Für die Lösung dieser Aufgabe orientieren wir uns am Beweis von Satz 2.4 aus dem Buch. Wir wollen die dort angegebene untere Schranke für die Anzahl der Primzahlen ≤ k verbessern. Die Idee dabei ist, die selbstbeschränkende Kodierung Bin aus dem Buch zu d wie folgt: Sei m ∈ N−{0}, sei l = verbessern. Dafür definieren wir eine neue Kodierung Bin 4 dlog2 (m + 1)e die Länge der Binärdarstellung von m und sei Bin(m) = a1 a2 . . . al . Sei α = −l mod 4. Dann sei Bin4 (m) = 0α Bin(m) = b1 b2 . . . bl0 eine abgewandelte Binärdarstellung von m mit so vielen führenden Nullen, dass die Gesamtlänge l0 = l + α durch 4 teilbar ist. Nun definieren wir d (m) = b b b b 0 b b b b 0 . . . b 0 b 0 b 0 b 0 1 . Bin 4 1 2 3 4 5 6 7 8 l −3 l −2 l −1 l Wir fügen also hinter je 4 Zeichen der Binärdarstellung Bin4 (m) ein Kontrollbit ein, so dass ein Kontrollbit 1 das Ende der Kodierung anzeigt. Jetzt können wir analog zum Beweis von Satz 2.4 eine Zahl n durch das Paar (m, n/pm ) darstellen, wobei pm der grösste Primfaktor von n ist. Wir repräsentieren das Paar (m, n/pm ) dann durch d (dlog (dlog (m + 1)e + 1)e)Bin(dlog (m + 1)e)Bin(m)Bin(n/p ) . Wort(m, n/pm ) = Bin 4 m 2 2 2 Analog zum Beweis von Satz 2.4 verwenden wir also eine selbstbeschränkende Kodierung, um die Länge der Länge von m darzustellen, allerdings verwenden wir unsere verbesserte Kodierung. Damit können wir die Länge unserer Darstellung abschätzen durch |Wort(m, n/pm )| ≤ 5 · (dlog2 (dlog2 (dlog2 (m + 1)e + 1)e + 1)e + 3) 4 + dlog2 (dlog2 (m + 1)e + 1)e + dlog2 (m + 1)e + dlog2 ((n/pm ) + 1)e . Dabei ergibt sich die + 3 durch die bis zu 3 führenden Nullen in unserer selbstbeschränkenden Kodierung. Mit einer analogen Argumentation wie im Beweis von Satz 2.4 erhalten wir, dass es unendlich viele natürliche Zahlen n gibt mit den Eigenschaften |Wort(m, n/pm )| ≥ dlog2 (n + 1)e − 2 (1) und K(n) ≥ dlog2 (n + 1)e − 2 . (2) Wir setzen die Ungleichung (1) in die Längenabschätzung ein und erhalten mit analogen Abschätzungen der Gaussklammern wie im Beweis von Satz 2.4, dass 5 · (dlog2 (dlog2 (dlog2 (m + 1)e + 1)e + 1)e + 3) 4 + dlog2 (dlog2 (m + 1)e + 1)e + dlog2 (m + 1)e + dlog2 ((n/pm ) + 1)e 15 5 ≤ + log2 log2 log2 m + log2 log2 m + log2 m + log2 (n/pm ) + 15 4 4 dlog2 (n + 1)e − 2 ≤ und somit log2 n ≤ 5 log2 log2 log2 m + log2 log2 m + log2 m + log2 (n/pm ) + 21 . 4 Analog zum Buch ist also pm ≤ 221 · m · log2 m · (log2 log2 m)5/4 . Mit Lemma 2.6 aus dem Buch folgt nun wie im Beweis von Satz 2.4 aus (2), dass für unendlich viele Zahlen k ∈ N Prim(k) ≥ 221 k · log2 k · (log2 log2 k)5/4 gilt. Die Behauptung der Aufgabe ist also für d = 221 bewiesen. Anmerkung: Man kann die Behauptung der Aufgabe auch zeigen, indem man die selbstbeschränkende Kodierung aus dem Beweis von Satz 2.4 verwendet, um die Länge der Länge der Länge von m zu kodieren. Damit ergibt sich dann für eine Konstante d0 die Abschätzung k Prim(k) ≥ 0 , d · log2 k · log2 log2 k · (log2 log2 log2 k)2 die für unendlich viele Zahlen k die in der Aufgabe geforderte Schranke impliziert.