TU Ilmenau, Fakultät IA Institut TI, FG Komplexitätstheorie und Effiziente Algorithmen Prof. Dr. (USA) M. Dietzfelbinger, Dr. E. Hübel Algorithmentheorie, SS06 Übungsblatt 2 für die 16.Woche 2006 Aufgabe 1 (RAM-Programme) N Für n ∈ bezeichne bin(n) die Binärdarstellung von n, d.h. bin(n) ist der eindeutig bestimmte Binärstring a`−1 . . . a0 ∈ {0, 1}∗ mit dem Binärwert X n = (a`−1 . . . a0 )2 := ai · 2i i<` wobei a`−1 = 1 für n > 0 gilt (keine führenden Nullen“), und bin(0) := 0 (die Null wird durch ” das Zeichen 0 dargestellt). (Siehe Skript AFS, S.203 - 206.). Ferner sei ||n|| := |bin(n)| die binäre Länge von n. Es gilt: ||n|| = max{1, dlog2 (n + 1)e} Entwerfen Sie ein RAM-Programm, das die Funktion n 7→ ||n|| berechnet. Hinweis: Wenn n = 0, ist ||n|| = 1. Wenn n ≥ 1, bildet man n1 := b n2 c, n2 := b n21 c, . . . , bis sich als Quotient 0 ergibt. Die Anzahl der Runden ist ||n||. Diese Idee soll als RAM-Programm realisiert werden. Aufgabe 2 (RAM-Programm für den ggT) N N Für a, b ∈ sagen wir a teilt b, in Zeichen a | b, falls es ein c ∈ mit b = c · a gibt. Der größte gemeinsame Teiler von a und b wird mit ggT(a, b) bezeichnet, d.h. für T := ggT(a, b) gilt: T | a und T | b und ∀t ∈ Da es kein c ∈ N: t | a ∧ t | b =⇒ t | T N mit ggT(0, 0) = c gibt (es gilt t | 0 für alle t ≥ 0), definiert man ggT(0, 0) := 0. (a) Schreiben Sie ein RAM-Programm M mit fM (a0 , a1 ) = ggT(a0 , a1 ) für alle a0 , a1 ∈ . N (b) Schreiben Sie ein RAM-Programm N mit HN = {(a, b) | ggT(a, b) = 1}. (c) Geben Sie möglichst genau die Kosten von M aus (a) im uniformen Kostenmaß an. Hinweis: Verwenden Sie den Euklidischen Algorithmus, den Sie unter http://eiche.theoinf.tu-ilmenau.de/lehre/at ws04/folie-1.pdf“ ” finden. Beachten Sie, dass ggT(0, a) = ggT(a, 0) = a für alle a ∈ gilt. N 2 Algorithmentheorie, SS06 Übungsblatt 2 Aufgabe 3 Registergrößen von RAM-Programmen nach t Schritten N N Eine Registerbelegung ist eine Funktion α : → mit ∃n ∈ (alle bis auf endlich viele Register haben den Wert 0). N ∀i ≥ n : α(i) = 0 Setze RB := {α | α ist Registerbelegung}. Sei M := B0 , . . . , Bl−1 ein beliebiges RAM-Programm. Für α ∈ RB sei dann A(α) := max ({α(i) | i ∈ N} ∪ {k | Rj ← k kommt in M vor}) . (Größter Registereintrag, größte Konstante im Programm.) N Für α ∈ RB und t ∈ bezeichne αt die Registerbelegung, die durch Ausführung von t Schritten von M startend mit der Registerbelegung α entsteht, beginnend mit Befehl B0 . N × N → N mit folgender Eigenschaft: (∗) Für alle t ∈ N, α ∈ RB und j ∈ N gilt: αt (j) ≤ F (A(α), t) (a) Finden Sie eine Funktion F : Beweisen Sie (∗) durch vollständige Induktion nach t. (b) Geben Sie ein RAM-Programm M an, das die Wachstumsschranke“ F nahezu ausschöpft, ” das also in wenigen Schritten sehr große Zahlen erzeugt. (c) Bearbeiten Sie (a) für RAM-Programme ohne Befehle der Form Ri ← Rj ∗ Rk . Aufgabe 4 Eine seltsame RAM-berechenbare Funktion Zeigen Sie, dass die Funktion ( 1, falls es ein p ≥ k gibt, so dass p und p + 2 Primzahlen sind, f (k) = 0 sonst RAM-berechenbar ist. Hinweis: Bedenken Sie, dass bislang ungeklärt ist, ob es unendlich viele Paare (p, p + 2) gibt, so dass p und p + 2 Primzahlen (genannt Primzahlzwillinge) sind. Machen Sie sich den prinzipiellen Wertverlauf der Funktion f klar und argumentieren Sie unter Verwendung dieser Einsicht, dass ein RAM-Programm existiert, das f berechnet.