2. ¨Ubungsblatt zu Algorithmen I im SS 2010

Werbung
Karlsruher Institut für Technologie
Institut für Theoretische Informatik
Prof. Dr. Peter Sanders
G.V. Batz, C. Schulz, J. Speck
2. Übungsblatt zu Algorithmen I im SS 2010
http://algo2.iti.kit.edu/AlgorithmenI.php
{sanders,batz,christian.schulz,speck}@kit.edu
Aufgabe 1
(Rekurrenzen, 4 + 4 Punkte)
a) Gegeben sei folgende Rekurrenz:
(
1
falls n = 1,
T (n) ≤
4 · T (dn/2e) + 6 · n falls n ≥ 2.
Zeigen Sie durch vollständige Induktion, dass T (n) ≤ 7n2 − 6n, falls n eine Zweierpotenz ist.
b) Gegeben sei folgende Rekurrenz:
(
c0 n
T (n) =
7
T (dn/5e) + T ( 10
n + 2.5) + c1 n
falls n ≤ n0 , n0 > 35 geeignet gewählt,
falls n > n0 .
Finden Sie eine Funktion f , so dass T (n) = Θ(f (n)) gilt und beweisen Sie ihre Behauptung.
Aufgabe 2
(Anwendung Mastertheorem, 1 + 1 + 1 + 1 Punkte)
Zeigen Sie mit Hilfe des Master-Theorems scharfe asymptotische Schranken für folgende Rekurrenzen:
a) A(1) := 1 und für n = 2k , k ∈ N: A(n) = A(n/2) + c̃n
b) B(1) := 1 und für n = 3k , k ∈ N: B(n) = 4B(n/3) + 4n
c) C(1) := 1 und für n = 6k , k ∈ N: C(n) = 3C(n/6) + n + 7
d) D(1) := 1 und für n = 6k , k ∈ N: D(n) = 6D(n/6) + C(n)
Aufgabe 3
(RAM-Code, 4 Punkte)
Geben sie einen sequentiellen Algorithmus in RAM-Maschinencode an, der die n-te Fibonacci-Zahl in
Zeit O(n) berechnet.
Hinweis: Es geht auch in O(log n), aber alle sequentiellen Algorithmen in O(n) ergeben volle Punktzahl.
Aufgabe 4
(Invarianten, 5 + 3 Punkte)
a) Das Merging Problem ist folgendermaßen definiert:
Gegeben: zwei aufsteigend sortierte Arrays A[1..n1 ], B[1..n2 ] von natürlichen Zahlen
Gesucht: das aufsteigend sortierte Array C[1..(n1 + n2 ) =: n] von natürlichen Zahlen, dass genau
die Zahlen von A und B enthält
Der folgende Algorithmus löst das Problem:
1: procedure merge(A : Array [1..n1 ] of N≥0 , B : Array [1..n2 ] of N≥0 )
2: precondition A[i] ≤ A[j]
∀i ≤ j mit i, j ∈ {1, ..., n1 }
3: precondition B[i] ≤ B[j]
∀i ≤ j mit i, j ∈ {1, ..., n2 }
4: A[n1 + 1] := ∞, B[n2 + 1] := ∞
5: n := n1 + n2
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
jA := 1, jB := 1;
for i := 1 to n do
C[i] = min(A[jA ], B[jB ])
if A[jA ] < B[jB ] then
jA = jA + 1
else
jB = jB + 1
invariant C[1..i] enthält genau A[1..jA − 1], B[1..jB − 1]
invariant B[k] ≤ A[jA ] ∀k ∈ {1..jB − 1}, A[k] ≤ B[jB ] ∀k ∈ {1..jA − 1}
invariant C[1..i] ist sortiert
assert jA = n1 + 1, jB = n2 + 1
postcondition C[i] ≤ C[j] ∀i ≤ j, i, j ∈ {1, ..., n}
postcondition C[1..n] enthält genau A[1..n1 ], B[1..n2 ]
return C
Beweisen sie die Korrektheit des vorgegebenen Algorithmus in dem Sie die vorgebenen Invarianten und Assertions beweisen. Beweisen Sie außerdem, dass der vorgegebene Algorithmus linearen
Zeitverbrauch hat.
b) Geben sei n ∈ N. Geben Sie einen iterativen Algorithmus an, der n! berechnet und beweisen Sie
die Korrektheit Ihres Algorithmus über eine Invariante.
Zusatzaufgabe
(Graphen, 3 Punkte)
Ein ungerichteter Graph heißt dreiecksfrei, wenn zwischen drei beliebigen Knoten des Graphen nie alle
drei möglichen Kanten existieren. Zeigen Sie: Ein dreiecksfreier Graph mit 2n Knoten hat maximal
n2 Kanten und es gibt für jedes n auch einen Graphen, der die Grenze erreicht.
Ausgabe: Mittwoch, 21.4.2010
Abgabe: Freitag, 30.4.2010, 12:45 im Briefkasten im Untergeschoss von Gebäude 50.34
Herunterladen