Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch
TU Kaiserslautern
Fachbereich Informatik AG Softwaretechnik
Ubungsblatt 9: Software-Entwicklung I (WS 2006/07) ¨
Ausgabe: 19. Dezember 2006 Abgabe: 8. Januar 2007, 12.00 Uhr Abnahme praktischer Teil: 8. - 12. Januar 2007
Aufgabe 1 Zeitaufwand (14 Punkte)
a) Beweisen Sie, dass die Funktion g(y) =y+y2 + 10000 in O(n2) liegt. (3 Punkte) b) Geben Sie eine Tabelle an, aus der hervorgeht, ob die folgenden Funktionen in O(1), O(n),
O(n2), O(2n),O(logn) oder O(nlogn) liegen.
1. f(n) = 4n 2. g(n) =n+ n3
3. h(n) = 2nlogn+n2+ 20 4. i(n) = n3+en n
5. j(n, m) =n2+m 6. k(n) = 2·m
(4 Punkte)
c) Zeigen Sie, dass folgende Enthaltenseinsbeziehungen gelten:
• O(2)⊆O(n)
• O(nlogn)⊆O(n3)
(4 Punkte) d) Bestimmen Sie f¨ur die beiden folgenden Codefragmente die FunktionC(n), welche die Anzahl der Aufrufe der Methodem() in Abh¨angigkeit von dem Wert der Variablenn ermittelt. Geben Sie jeweils eine nachvollziehbare Herleitung der Funktion an. Geben Sie jeweils an, ob C(n) in O(1), O(n), O(n2),O(2n),O(logn) oder O(nlogn) liegt.
int i;
for(i=1; i<= n+1; i++) { int j=2*n;
while(j>=i) { m();
m();
j--;
} }
int i=1;
if (i<=n) { do {
for(int j=i; j<=n; j++) { for(int k=1; k<=j; k++) {
m();
} i++;
m();
}
} while (i<=n);
}
(3 Punkte)
Aufgabe 2 Zweidimensionale Suchb¨ aume (praktisch) (8 Punkte)
Analog zu den bin¨aren Suchb¨aumen aus der Vorlesung sollen Sie in dieser Aufgabe zweidimen- sionale Suchb¨aume zur Abspeicherung von Koordinaten implementieren. Das heisst, dass Paare von Zahlen in Suchb¨aumen abgespeichert werden. Die Koordinaten sollen prim¨ar nach der ersten Koordinate geordnet sein, sekund¨ar nach der zweiten.
Benutzen Sie folgende Signaturen:
boolean contains( Dim2Tree b, int xcoord, int ycoord ) { ... }
static void printTree( Dim2Tree b ) { ... }
static void sortedInsert( Dim2Tree, int xcoord, int ycoord ) { ... }
static Dim2Tree mkBinTree( int xcoord,int ycoord ) { ... }
Definieren Sie eine Klasse Dim2Tree, erg¨anzen Sie die Funktionsprozeduren und Testen Sie Ihre Baumimplementierung. Geben Sie einige Ihrer Testf¨alle mit ab.
Aufgabe 3 Mergesort vs. Quicksort (praktisch) (8 Punkte)
a) Implementieren Sie in Java Mergesort und Quicksort (vgl. Vorlesung) prozedural f¨ur Arrays von ganzen Zahlen.
b) Testen Sie Ihre Programme f¨ur hinreichend große Eingaben. Insbesondere soll ein Array von 20000000 Zahlen sortiert werden, dessen Elemente mit Hilfe folgender Funktion gef¨ullt werden:
static void fill() {
for (int i=0; i<=maxIndex; i++) {
array[i] = (987654321 % (12345 + i)) % 100 ; } }
Stoppen Sie die Zeit, die die Programme f¨ur diese und andere Eingaben ben¨otigen, zum Beispiel mit dem Unix Kommando time.
c) Welchen Aufwand haben Merge bzw. Quicksort, welchen Zusammenhang stellen Sie bez¨uglich Ihrer gemessenen Zeit fest? Wie erkl¨aren Sie sich Ihre Beobachtungen?