Klausur Algorithmik I / AuD I

Werbung
FH Braunschweig/Wolfenbüttel
Fachbereich Informatik
Prof. Dr. R. Rüdiger
Wolfenbüttel, den 20. Juni 2006
Klausur Algorithmik I / AuD I
SS 06
Hinweise:
• Es sind beliebige schriftliche Unterlagen als Hilfsmittel zugelassen, nicht jedoch Rechner, Handys oder Taschenrechner,
also generell keine Elektronik“.
”
• Die Klausur besteht aus 5 Aufgaben.
• Tragen Sie Ihre Ergebnisse auf diesem Deckblatt ein. Die Anzahl
der vorgedruckten Kästchen muß nicht unbedingt gleich der Zahl
der einzutragenden Ergebnisse sein.
Name:
Vorname:
Mat.-Nr.:
Freiversuch (F0) oder F1/F2/F3-Prüfung? bitte ankreuzen:
F0
F1
F2
F3
erreichte Punktzahl/Note:
WICHTIG: Entscheidend für die Bewertung sind die Ergebnisse, die Sie auf diesem Blatt eingetragen
haben. Geben Sie aber bitte alle Blätter mit ab, die Ihre Vorüberlegungen und Zwischenergebnisse
zeigen (jedes Blatt mit Namen, Vornamen und Matrikelnummer versehen).
Ihre Ergebnisse
Aufgabe 1
(Punktzahl: 6/24)
a) Anzahl Aufrufe: . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufgabe 3
(Punktzahl: 4/24)
Resultate:
b) Belegungen von L und R:
L:
Aufgabe 4
(Punktzahl: 4/24)
R:
a) preorder: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
..........................................
..........................................
L:
R:
L:
b) postorder: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
..........................................
..........................................
R:
L:
R:
R:
Aufgabe 2
(Punktzahl: 6/24)
Aufgabe 5
L:
p
(Punktzahl: 4/24)
a) Richtig/Falsch, anzugeben als R/F:
(1) (2) (3) (4) (5)
b) Werte: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
..........................................
r
x
Die Aufgaben
Aufgabe 1
Merge(A, p, q, r)
1 n1 ← q − p + 1
2 n2 ← r − q
3 create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1]
4 for i ← 1 to n1
5
do L[i] ← A[p + i − 1]
6 for j ← 1 to n2
7
do R[j] ← A[q + j]
8 L[n1 + 1] ← ∞
9 R[n2 + 1] ← ∞
10 i ← 1
11 j ← 1
12 print(L) nach print stets neue Zeile
13 print(R)
14 for k ← p to r
15
do if L[i] ≤ R[j]
16
then A[k] ← L[i]
17
i←i+1
18
else A[k] ← R[j]
19
j ←j+1
(Punktzahl: 6/24)
Merge-Sort(A, p, r)
1 if p < r
2
then q ← b(p + r)/2c
3
Merge-Sort(A, p, q)
4
Merge-Sort(A, q + 1, r)
5
Merge(A, p, q, r)
In dieser Aufgabe geht es um die Arbeitsweise
von Mergesort. Die anfängliche Belegung des Arrays
A ab Index 1 sei 27, 57, 22, 16, 90. Gestartet wird
Merge-Sort(A, 1, 5).
a) Wie häufig wird die Prozedur (in JavaNomenklatur: Methode“) Merge-Sort akti”
viert?
Hinweis: Der erste Aufruf ebenso wie die Fälle, in
denen diese Prozedur nichts tut (wenn also p ≥ r),
sollen mitgezählt werden.
b) Geben Sie die Arraybelegungen von L und R an
(nur diese!), wie sie jeweils in den Zeilen 12 und 13
in Merge bestehen. Das Element ∞ soll nicht mit
angegeben werden.
Aufgabe 2
(Punktzahl: 4/24)
Der folgende Text ist dem Skript entnommen (nur zur Erinnerung):
Ein B-Baum ist durch die folgenden Eigenschaften definiert:
• Jeder Knoten x besitzt die folgenden Felder:
die Anzahl n[x] von Schlüsseln
die n[x] Schlüssel selbst: key i [x] in aufsteigend sortierter Reihenfolge
einen booleschen Wert leaf [x]: ist der Knoten ein Blatt?
• Jeder innere Knoten hat n[x] + 1 Zeiger ci [x]; die Zeiger von Blättern sind undefiniert.
• Wenn ki ein Schlüssel ist in dem Unterbaum mit Wurzel ci [x], dann gilt
k1 ≤ key 1 [x] ≤ k2 ≤ key 2 [x] ≤ · · · ≤ kn[x] ≤ key n[x] [x] ≤ kn[x]+1
• Alle Blätter liegen auf der gleichen Höhe.
• Es gibt einen für jeden B-Baum charakteristischen Parameter t ≥ 2, den minimum degree.
Jeder Knoten außer der Wurzel hat mindestens t − 1 Schlüssel. Jeder innere Knoten außer der Wurzel hat
mindestens t Kinder.
Jeder Knoten hat höchstens 2t − 1 Schlüssel und damit 2t Kinder. Ein Knoten ist voll, wenn er genau 2t − 1
Schlüssel enthält.
a) Die folgenden Beispiele sollten B-Bäume darstellen (in der Darstellung des Skripts entsprechend einer PreorderTraversierung). Leere Plätze eines Knotens (einer Seite“) sind durch x gekennzeichnet.
”
Möglicherweise gibt es jedoch Widersprüche zu den oben abgedruckten definierenden Eigenschaften eines BBaums.
Entscheiden Sie für jeden der Fälle (1) - (5), ob ein korrekt aufgebauter B-Baum vorliegt oder nicht.
(1) t = 3
(4) t = 3
+--------------------------------+
| 19 49 76 x x
|
|
7 13 x x x
|
|
1 3 5 x x
|
|
9 11 x x x
|
|
15 17 x x x
|
|
25 37 x x x
|
|
21 23 x x x
|
|
27 29 31 33 35 |
|
39 41 43 45 47 |
|
56 68 x x x
|
|
51 52 54 x x |
|
58 60 62 64 66 |
|
70 72 74 x x |
+--------------------------------+
+------------------------+
| 7 13 24 x x
|
|
1 3 5 x x
|
|
9 11 x x x
|
|
15 16 18 20 22 |
|
26 28 x x x
|
+------------------------+
(2) t = 2
+--------------------------+
| 17 28 x
|
|
5 9 x
|
|
1 3 x
|
|
7 x x
|
|
21 x x
|
|
19 x x |
|
22 24 26 |
|
32 x x
|
|
30 x x |
|
34 36 38 |
+--------------------------+
(5) t = 2
+--------------------------+
| 11 20 x
|
|
3 x x
|
|
1 x x
|
|
5 7 9
|
|
17 x x
|
|
13 15 x |
|
18 x x |
|
28 x x
|
|
22 24 26 |
|
30 x x |
+--------------------------+
(3) t = 5
+------------------------------------+
| 13 x x x x x x x x
|
|
1 3 5 7 9 11 x x x
|
|
15 16 18 20 22 24 26 28 x |
+------------------------------------+
b) Was ergibt sich bei einer Postorder-Traversierung des folgenden etwas schlampig gezeichneten B-Baums?
Tragen Sie die durchlaufenen Schlüsselwerte vorne in den vorgesehenen 2 Zeilen einfach fortlaufend hintereinander
ein.
12
3 9
1
16
11
5 7
18 20
14
Aufgabe 3
(Punktzahl: 4/24)
Welche Werte gibt das folgende Programm bei den vier Aufrufen von proc(. . . ) in den Zeilen 12, 13, 14 und 15 jeweils
aus?
1
2
3
4
5
6
7
8
9
10
public class Aufgabe3 {
private static String c(int x) {
if (x < 10)
return x + ””;
return (char) (x − 10 + (int)’A’) + ””;
}
public static String proc(int x, int B) {
return
((x >= B)? proc(x/B, B): ””) + c(x % B);
}
public static void main (String [ ] args) {
System.out.print(proc(33, 13) + ”\t”);
System.out.print(proc(33, 15) + ”\t”);
System.out.print(proc(33, 17) + ”\t”);
System.out.print(proc(33, 19));
}
11
12
13
14
15
16
17
}
Aufgabe 4
(Punktzahl: 4/24)
In welcher Reihenfolge werden die Knoten im abgedruckten binären Suchbaum besucht, wenn man ihn entsprechend
den Strategien
12
a) preorder und
7
b) postorder traversiert?
5
3
17
14
8
6
4
10
9
18
13
16
21
15
11
20
19
Aufgabe 5
(Punktzahl: 6/24)
In dem folgenden Programm ist eine der vielen Varianten von Quicksort implementiert.
Geben Sie die Ausgabe dieses Programms an. Die Ausgabeanweisung steht in Zeile 18 der Klasse QuickSort.
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class QuickSortTest {
public static void main (String [ ] args) {
int dummy = Integer.MIN VALUE; // dummy wird nicht mitsortiert
QuickSort qs = new QuickSort (new int[ ] {dummy, 9, 2, 8, 3, 7, 4, 6, 5});
qs.sort();
}
}
public class QuickSort {
private int [ ] a;
public QuickSort(int [ ] a) {
this.a = a;
}
public void sort () {
sort(1, a.length − 1);
}
private void sort (int p, int r) {
if (p < r) {
int q = partition(p, r);
sort(p, q − 1);
sort(q + 1, r);
}
}
public int partition (int p, int r) {
int x = a[r];
System.out.println(p + ”\t” + r + ”\t” + x);
int i = p − 1;
int tmp;
for (int j = p; j <= r − 1; j++) {
if (a[j] <= x) {
i++;
tmp = a[i]; a[i] = a[j]; a[j] = tmp;
}
}
tmp = a[i+1]; a[i+1] = a[r]; a[r] = tmp;
return i + 1;
}
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
}
Herunterladen