Testaufgaben zum Fach Algorithmen und Datenstrukturen
1. Aufgabe: Sortieren und Suchen
a) Ist die folgende Behauptung richtig oder falsch ?
"Die Laufzeit des rekursiven 2-Wege-Merge-Sort ist unabhängig von den Werten der Schlüssel in der Eingabedatei." Begründen Sie Ihre Antwort.
b) Modifizieren Sie das hier abgedruckte Verfahren "Radix Exchange" aus der Vorlesung, so daß es eine absteigend sortierte Liste liefert und geben Sie eine verbale Erläuterung und Begründung Ihrer Änderungen an.
unsigned Z(unsigned k, int i) { return (k >> i) & 0x0001;}
void RadixSort (int *A, int left, int right, int b) { int i, j;
int item;
if ((left<right) && (b>=0))
{ i = left; j = right;
while (i != j) {
while (Z(A[i],b)==0 && (i<j)) i++;
while (Z(A[j],b)!=0 && (j>i)) j--;
item = A[i];
A[i] = A[j];
A[j] = item;
}
if (Z(A[right],b) == 0) j++;
RadixSort (A,left, j-1,b-1);
RadixSort (A,j, right,b-1);
} }
c) Das folgende Programm zum binären Suchen enthält Fehler. Geben Sie an, warum es falsch ist.
int Search (int *A, int n, int x) { int i, j, k;
i=1; j=n; k=1;
while (i<j) {
k = (i + j) / 2;
if (A[k]<x) i = k+1;
else j = k;
};
return(k);
}
2. Aufgabe: Vergleich binärer Bäume
Schreiben Sie eine Funktion compareTrees , die feststellt, ob zwei Bäume T1 und T2 iden- tisch sind, d.h. die gleiche Knotenstruktur besitzen und in den Knoten identische Schlüssel haben. Es soll die Klasse Tree aus den Übungen zugrunde gelegt werden.
Der Prototyp habe die Form: bool compareTrees (Node *root1, Node *root);
Der Aufruf habe die Form: test = compareTrees(T1.root, T2.root);
3. Aufgabe: In-Order-Durchlauf
a) Sind zwei binäre Suchbäume, bei denen der Durchlauf in symmetrischer Reihenfolge die selbe Schlüsselfolge ergibt, identisch ? Begründen Sie Ihre Antwort !
b) Sind zwei vollständige binäre Suchbäume, bei denen der Durchlauf in symmetrischer Reihenfolge die selbe Schlüsselfolge ergibt, identisch ? Begründen Sie Ihre Antwort !
4. Aufgabe: AVL-Bäumen
a) Wieviele innere Knoten hat ein AVL-Baum der Höhe 12 mindestens ? b) Wieviele innere Knoten hat ein AVL-Baum der Höhe h=12 höchstens ?
Führen Sie mit dem unten gezeigten AVL-Baum nacheinander die folgenden Operationen durch. Kommentieren Sie Ihr Vorgehen, so daß es nachvollziebar wird und geben Sie die Zwischenzustände (vor dem Ausgleich) an:
1. Einfügen eines Knotens mit dem Schlüssel 292 2. Löschen des Knotens 5
3. Löschen des Knotens 116 4. Löschen des Knotens 328
328 59
5 174
116
665
403 777
3 295 888
290 300
5. Aufgabe: B-Bäume
Es ist der folgende B-Baum der Ordnung m=4 gegeben:
54
50 72 86
27 40 42 51 56 77 88
Löschen Sie daraus nacheinander die Schlüssel 56, 86, 54, 72 , das Ergebnis einer Lösch- operation ist dabei stets zum Ausgangspunkt für die nächste zu nehmen.
6. Aufgabe: Hashing
a) Umrechnung nichtnumerischer Schlüssel
Nach dem in der Vorlesung behandelten Verfahren sind alphanumerische Schlüssel in nu- merische Werte umzurechnen. Zugrunde liegt das folgende, 62 Zeichen umfassende Alpha- bet::
A, B, ... , Z, a, b, ... , z, 0, 1, ... , 9
Wie lautet Ihre Benutzerkennung (nicht Ihr Paßwort) an der FH Regensburg ? : _________
Bestimmen Sie zu dem Schlüssel, der aus den ersten 4 Zeichen Ihrer Benutzerkennung ge- bildet wird, den numerischen Schlüssel.
b) Double Hashing
Die Buchstaben des Textes
T E S T A U F G A B E
sollen einzeln in der Reihenfolge, in der sie im Text vorkommen, in eine Hash-Tabelle einge- ordnet werden. Dazu gehen wir von der folgenden Zuordnung der Buchstaben zu numeri- schen Schlüsseln aus:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Verwenden Sie dazu das Double Hashing-Verfahren mit den folgenden Hash-Funktionen Ho(k) = k mod 17
Hi (k) = (Ho(k) + i * H'(k) ) mod 17 für i = 1, 2, 3, ...
Dabei ist H'(k) eine weitere Hash-Funktion, mit der die Schrittweite zum Sondieren in Abhängigkeit vom Schlüssel k selbst bestimmt wird. Wir verwenden
H'(k) = 8 - (k mod 8)
Markieren Sie die Indexpositionen, an denen eine Kollision aufgetreten ist. Wieviele Kollisionen treten dabei insgesamt auf ?
Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
HashTabelle
Einfüge-Schritt Nr.
Anzahl der Kollisionen: _____________