Algorithmentheorie, SS06 ¨Ubungsblatt 2

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