Aufgabenblatt 4

Werbung
Prof. Dr. Th. Letschert
Algorithmen und Datenstrukturen
Aufgabenblatt 4
Aufgabe 1
1. Was versteht man (in der Informatik) unter einem Profiler und was ist Profiling?
2. Wie kann man in Java auf einfache Laufzeit bestimmter Codesequenzen gemessen werden?
3. Findet die Laufzeitanalyse eines Algorithmus zur Laufzeit statt?
4. Ist Merge–Sort besser als Selection–Sort oder umgekehrt?
5. Was genau bedeutet die Aussage “Algorithmus A hat eine Laufzeit von T (n) = 5 ∗ n2 + 7n + 3”?
6. Was genau bedeutet die Aussage “Algorithmus A hat die Laufzeitkomplexität O(n2 )”?
Aufgabe 2
1. In der Definition von der Laufzeit TA (n) eines Algorithmus A wird von der realen Laufzeit abstrahiert: Man
konzentriert sich auf die Dinge, die vom Algorithmus abhängen und ignoriert technisches wie, Hardware,
Betriebssystem, Compiler, etc. Warum ist das sinnvoll?
2. In der Definition von der Laufzeit T eines Algorithmus A und der Laufzeitkomplexität OA kommt jeweils
eine Konstante c vor, welche Bedeutung haben die Konstanten jeweils und warum zwei c’s?
3. Die O–Notation dient dazu, eine Funktion zu beschreiben, bzw. eine Eigenschaft einer Funktion anzugeben.
Erläutern Sie: Welche Funktion wird durch was beschrieben.
Aufgabe 3
Zeigen Sie dass die Funktion f mit f (n) = n2 nicht O(n) ist. Verwenden Sie einen Widerspruchsbeweis: Angenommen n2 wäre O(n), dann gäbe es eine Konstante c ∈ N und ein n0 derart, dass für fast alle (d.h. für alle außer
endlich viele) n gilt:
n2 ≤ c ∗ n, ∀n ≥ n0 Warum kann das nicht stimmen? (Dividieren Sie beide Seiten der Ungleichung durch n)
Aufgabe 4
Ein Algorithmus A habe die Laufzeit T (n) = a ∗ n2 + b für irgendwelche positiven Konstanten a und b. Zeigen
Sie: die Laufzeitkomplexität von A ist O(n2 ) ist. Überlegen Sie, was die Aussagen zu bedeuten haben und was zu
beweisen ist.
Aufgabe 5
1. Welche Komplexität hat die Suche nach einer Zeichenkette der Länge l in einem Feld der Größe n wenn das
Feld sequentiell durchsucht wird.
2. Welche Komplexität haben geschachtelte Schleifen?
Aufgabe 6
1. Welche Komplexität hat rekursive Berechnung der Fibonacci–Zahlen?
2. Die Laufzeit kann deutlich verbessert werden, wenn bereits berechnete Ergebnisse wiederverwendet werden.
Geben Sie einen entsprechen, immer noch rekursiven Algorithmus an.
Aufgabe 7
Welche Laufzeitkomplexität haben
public static void sort(int[] a, final int i) {
final int n = a.length;
if (i < n - 1) {
int small = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[small]) {
small = j;
}
}
// swap a[i] and a[small]
final int t = a[small];
a[small] = a[i];
a[i] = t;
sort(a, i+1);
}
}
und
public static void sort(int[] a) {
final int n = a.length;
for (int i= 0; i<n; i++) { // INV a[0..i-1] is sorted
// find the index of the smallest in a[i..n]
int small = i;
for (int j= i+1; j<n; j++) {
if (a[j]<a[small]) { small = j; }
}
// swap a[i] and a[small]
int t = a[small];
a[small] = a[i];
a[i] = t;
}
}
Worin besteht der Unterschied?
Sortieren Sie mit beiden Verfahren ein ausreichend großes Feld und messen Sie die Laufzeit. Bestätigt dies Ihre
Laufzeitbetrachtungen?
2
Aufgabe 8
1. Warum ist die Aussage “Algorithmus A ist NP-vollständig” unsinnig?
2. Welche Eigenschaften haben Probleme der Klassen P und NP? Was versteht man unter einem NP-vollständigen Problem.
3. Welche Kriterien muss ein Problem erfüllen, um ein NP-vollständiges Probleme zu sein?
3
Herunterladen