1 Schleifeninvariante 2 O-Notation

Werbung
Stand: March 23, 2015
1
Schleifeninvariante
Zeige die Korrektheit folgender Algorithmen mittels geeigneter Schleifeninvarianten.
1.1
Fakultät
Folgender Algorithmus eignet sich für die Berechnung der Fakultät einer natürlichen Zahl k:
fakultät(int k)
f =j=k
while j > 1 do
j =j−1
f =f ∗j
return f
1.2
Maximum
Sei L eine nichtleere, einfach verkettete Liste (reeller) Zahlen. f indM ax liefert den Wert des größten
gespeicherten Elements.
findMax(Liste L von natürlichen Zahlen)
x = L.head
max = x.key
while x.next 6= nil do
x = x.next
if x.key > max then max = x.key
return max
2
O-Notation
2.1
Beweise oder widerlege die Behauptungen.
1. f (n) = 12 n − 2 ∈ Ω(log2 n))
2. f (n) = nn + n2 ∈ O(nn−1 )
3. f (n) =
n4 −4n2
2n+7
∈
/ O(n3 )
2
4. f (n) = log3 (n5 · 9n ) ∈ Ω(n log3 n)
5. f (n) = loga n ∈ Θ(logb n) für beliebige a, b > 1
6. f (n) =
1
2
100 n
+ n sin n ∈ Θ(n2 )
7. f (n) = n4 − 10n3 + 2n ∈ O(n3 )
8. f (n) =
9
n
∈
/ Ω( √1n )
2.2
Wir betrachten folgendes Problem. Aus einem Eingabefeld A von ganzen Zahlen sollen die k kleinsten
Zahlen ausgegeben werden. Beweisen Sie, dass jeder Algorithmus mit Eingabeparametern A und k, der
dieses Problem löst, eine Worst-Case-Laufzeit von Ω(n) hat.
Kann man eine noch ”bessere” (also asymptotisch größere) untere Schranke angeben? Beweisen Sie Ihre
Behauptung!
1
3
Rekursionsgleichungen
3.1
Gleichungen lösen
Finde für die nachstehenden Rekursionsgleichungen jeweils eine Funktion f, für die T ∈ Θ(f ) gilt.
√
1. T (n) = 4T (bn/2c) + 12 n2 n
2. T (n) = 4T bn/2c) + n2 log n + n
3. T (n) = T (n − 3) + 2n
√
4. T (n) = 2T (bn/4c) + 3 n
5. T (n) = 3T (bn/2c) +
n
6
6. T (n) = 3T (bn/5c) +
1√
2 n
7. T (n) = 12T (bn/2c) + n4
8. T (n) = T (bn/2c) + T (dn/2e) + O(n log n)
3.2
Gleichungen aufstellen
Stelle Rekursionsgleichungen für die Worst-Case-Laufzeit folgender Algorithmen auf und löse diese anschließend.
Algo1(Feld vom Typ int A, int l = 1, int r = A.length)
if l < r then
m = b(l + r)/2c
Algo1(A, l, m)
Algo1(A, m + 1, r)
InsertionSort(A, l, r)
4
Sortierverfahren
Sei A ein Feld mit 10.000.000 ganzen Zahlen aus dem Bereich [1, 231 −1], das aufsteigend sortiert ist. Nun
wird es mit k Vertauschungen für k << 10.000.000 von Zahlenpaaren durcheinander gebracht. Warum
ist hier QuickSort schlecht geeignet? Welches Sortierverfahren bietet sich an?
Sei die Reihenfolge der Zahlen in A nun zufällig. Ist die Anwendung von Counting-Sort hier sinnvoll?
Welches andere Sortierverfahren ist geeignet?
Nun enthalte A 10.000.000 zufällige Zahlen aus dem Bereich [1,1000]. Warum ist hier QuickSort schlecht
geeignet? Wie kann man besser sortieren?
Nenne jeweils ein Sortierverfahren, das stabil ist, in situ arbeitet und unter gewissen Voraussetzungen
(welchen?) in Linearzeit abläuft.
5
5.1
Elementare Datenstrukturen
MinStack
Gesucht ist eine Datenstruktur zum Verwalten einer dynamischen Menge S von Zahlen. Es sollen wie
bei einem Stapel die Methoden Push(key k) und Pop() zur Verfügen stehen, zusätzlich eine Methode
Minimum(), welche die kleinste Zahl der Menge S ausgibt und diese nicht aus der Menge entfernt. Alle
Operationen sollen in konstanter Zeit ablaufen. (Hinweis: zwei Stapel verwenden)
2
5.2
Hashing
Welche der Funktionen h1 eignen sich beim doppelten Hashing (d.h. hi (k) = (h0 (k) + ih1 (k)) mod 25)
für eine Hashtabelle der Länge 25 mit Hashfunktion h0 (k) = (4k + 2) mod 25? Warum?
• h1 (k) = 1
• h1 (k) = 9 − (k mod 4)
• h1 (k) = k mod 17
• h1 (k) = (3 + 5k) mod 25
• h1 (k) = (4k − 1) mod 13
Welche Vor- und Nachteile hat es, Kollisionen durch Verkettung aufzulösen? Was versteht man unter
primärem, was unter sekundärem Clustering? Bei welcher Sondierungsvariante treten diese Probleme
auf?
6
Binäre Suchbäume
6.1
Grenzfälle und Beispiele
Gib für folgende Fälle jeweils ein Beispiel an:
• ein Rot-Schwarz-Baum der Höhe 3 mit minimaler Knotenanzahl
• ein binärer Suchbaum der Höhe 3 mit maximaler Knotenanzahl, welcher aber kein Rot-SchwarzBaum ist (d.h. für den keine gültige Färbung existiert)
• die Reihenfolge der Elemente, sodass durch Einfügen in einen binären Suchbaum ein Baum der
Höhe 3 entsteht, bei dem alle Ebenen vollständig gefüllt sind
• Zeigen Sie, dass in jedem binären Suchbaum, die Anzahl der Knoten mit zwei Kindern um 1 kleiner
als die Anzahl der Blätter ist! Tipp: Verwenden Sie vollständige Induktion und achten Sie darauf,
dass Sie in Ihrem Beweis auch die folgenden Grenzfälle abgedeckt haben:
A: Jedes Blatt hat keine Geschwister.
B: Jedes Blatt hat einen Geschwisterknoten.
6.2
Suche im Binärbaum
In einem binären Suchbaum soll ein Element gesucht werden. A enthält die Elemente in der Reihenfolge
in der sie dabei besucht werden, d.h. A[1] ist die Wurzel des Baumes, A[2] das erste Kind auf dem Pfad
den die Suche durch den Baum geht. Welche dieser Folgen kann auf diese Weise entstehen?
• A = h2; 252; 401; 398; 330; 344; 397; 363i
• A = h924; 220; 911; 244; 898; 258; 362; 363i
• A = h935; 278; 347; 621; 299; 392; 358; 363i
6.3
Balancierte Bäume
1. Was versteht man unter einem (binären) balancierten Suchbaum? Welchen Vorteil bietet er gegenüber
allgemeinen Suchbäumen?
2. Es sei ein binärer Suchbaum T gegeben, bei dem die Wurzel und alle ihre Kinder rot sind. Sonst
erfülle T die Eigenschaften eines Rot-Schwarz-Baumes. Wie kann man durch Umfärben von Knoten
einen gültigen Rot-Schwarz-Baum erhalten? Halten Sie dabei die Anzahl an Umfärbungen so klein
wie möglich! Beweisen Sie Ihre Behauptungen!
3
7
Augmentierung
Ein Rot-Schwarz-Baum zur Verwaltung einer dynamischen Menge verschiedener ganzer Zahlen soll so
augmentiert werden, dass man zu jeder Zeit bestimmen kann, für welche zwei Zahlen i, j der Menge mit
i < j die Differenz j − i am kleinsten ist.
Gib die Methode M inGap in Pseudocode an, die das gesuchte Zahlenpaar in konstanter Zeit liefert.
Welche Extrainformationen speicherst du im Baum und wie lassen sich diese beim Einfügen, Löschen
und Suchen aufrechterhalten, ohne die Laufzeiten der entsprechenden Methoden zu verschlechtern?
Lässt sich das Problem auch mit konstantem Zusatzspeicher lösen, wenn man auf die Delete-Methode
verzichtet (d.h. nur Elemente einfügen kann)?
8
8.1
Graphen
Zweifärbung
Ein Graph G = (V, E) heißt genau dann zweifärbbar, wenn eine Abbildung c : V → {schwarz, weiss}
existiert, so dass es keine Kante {u, v} ∈ E gibt mit c(u) = c(v). Anders ausgedrückt können wir die
Knoten so färben, dass keine zwei benachbarten Knoten dieselbe Farbe bekommen – das geht nicht, wenn
der Graph nicht zweifärbbar ist.
Welches ist der kleinste Graph, der nicht zweifärbbar ist?
Gib einen Algorithmus in Pseudocode an, der für einen gegebenen Graphen G = (V, E) und eine gegebene
Färbung c testet, ob es zwei benachbarte Knoten mit derselben Farbe gibt. Was ist die asymptotische
Worst-Case-Laufzeit des Algorithmus?
Gib außerdem einen Algorithmus an, der einen gegebenen Graphen G = (V, E) auf Zweifärbbarkeit testet.
Die Laufzeit soll in O(|V | + |E|) liegen. Beachte, dass G nicht zusammenhängend sein muss.
8.2
Dijkstra
Ermittle im nachstehenden Graphen unter Verwendung von Dijkstras Algorithmus einen Baum kürzester
Wege bezüglich v.
Eine Voraussetzung für die Korrektheit von Dijksta war, dass der Graph nur Kantengewichte ≥ 0 hat.
Gib einen (gerichteten) Graph an, in dem negative Kantengewichte vorkommen, bei dem der Algorithmus
kein korrektes Ergebnis liefert. Gib andererseits auch einen Graphen an, der gerichtete Kanten negativer
Länge enthält, für den der Algorithmus trotzdem funktioniert.
9
Weiteres
- zur amortisierten Laufzeitanalyse: die Aufgaben am Ende des Skripts zu diesem Thema
- die Aufgaben aus den Kurztests und der Klausur, die auf Wuecampus2 in der Klausurensammlung Informatik
zu finden sind
4
Herunterladen