¨Ubungen zur Vorlesung Datenstrukturen und Algorithmen SS 2010

Werbung
Christian Scheideler
u.v.a.
Paderborn, den 23. April 2010
Abgabe 30. April 2010, 11:15 Uhr
Übungen zur Vorlesung
Datenstrukturen und Algorithmen
SS 2010
Blatt 2
AUFGABE 1:
Wir werfen zwei unterscheidbare Würfel mit Augenzahlen 1,2,. . . ,6.
• Bestimmen sie alle Elementarereignisse!
• Wie hoch ist die Wahrscheinlichkeit dass die Summe beider Würfel 7 ist?
• Wie hoch ist die Wahrscheinlichkeit dass einer der beiden Würfel 3 ist unter der Bedingung dass deren Summe 7 ist?
• Wie gross ist der Erwartungswert der Augensumme beider Würfel?
• Sie würfeln 100 Mal hintereinander zwei Würfel. Wie gross ist die erwartete Anzahl an
Würfen, bei denen Sie einen Pasch (d.h. zwei gleiche Augenzahlen) erwürfeln?
AUFGABE 2:
Bestimmen Sie für je zwei der folgenden Laufzeitfunktionen fi und fj , ob fi = O(fj ), fi =
Omega(fj ) oder fi = Θ(fj ) gilt.
f1 (n) =
n(n + 1)
,
2
f2 (n) = 2log(n)+1 ,
f3 (n) =
√
5n + 2 ,
f4 (n) = log(n)4 .
Begründen Sie Ihre Antwort!
AUFGABE 3:
Beschreiben Sie, wie sich k neue Elemente in eine sortierte Liste mit n Elementen in Zeit
O(k log k + n) einfügen lassen. Die Liste soll hinterher wieder sortiert sein.
Geben Sie dazu einen exakten Algorithmus an (z.B. in Pseudocode) und begründen Sie dessen Laufzeit detailliert.
Hinweis: Verwenden Sie (die Idee von) mergeSort. Sie dürfen Methodenaufrufe, wie zum
Beispiel mergeSort(l,r) aus der Vorlesung benutzen. Achten Sie dabei auf die richtige Verwendung der Parameter und schreiben Sie notfalls dazu, ob Sie den Algorithmus von den
Folien oder aus dem Skript benutzen.
AUFGABE 4:
Betrachten Sie den folgenden Algorithmus, der auf einer Folge von Zahlen v[0] . . . v[n − 1]
operiert.
a) Zeigen Sie, dass dieser Algorithmus die Folge korrekt sortiert.
b) Bestimmen Sie die Anzahl ausgeführter Vergleiche, sowie die Anzahl der ausgeführten
swap-Operationen (Vertauschungen) (jeweils worst-case in O()-Notation).
shakersort(v, n)
// v: Array von Schluesseln,
// n: Anzahl Elemente (Groesse von v)
{
lower = 1;
higher = n - 1;
lastswap = n - 1;
do {
// bubble down
for (int i = higher; i >= lower; i--) {
if (v[i-1] > v[i]) {
swap (v, i-1, i); // Vertausche i-tes und (i-1)-tes Element von v
lastswap = i;
}
}
lower = lastswap + 1;
// bubble up
for (int i = lower; i <= higher; i++) {
if (v[i-1] > v[i]) {
swap (v, i-1, i); // Vertausche i-tes und (i-1)-tes Element von v
lastswap = i;
}
}
higher = lastswap - 1;
} while (lower <= higher);
}
Herunterladen