2. Klausur 2009

Werbung
Name:
Seite 2
Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.
Aufgabe 1 (8 Punkte)
1. Wie viele negative Zahlen (ohne 0) lassen sich im 4-Bit-Zweierkomplement darstellen?
2. Wie viele Blätter besitzt ein Entscheidungsbaum zur Sortierung einer Eingabefolge
der Länge n ∈ N?
3. Nennen Sie ein Sortierverfahren, das nicht auf Vergleichen beruht.
4. Welche Operationen stellt der ADT Keller zur Verfügung?
5. Welche Eigenschaft besitzt die Zahlenfolge, die bei der Inorder-Traversierung eines
binären Suchbaumes (mit ganzzahligen Schlüsseln) entsteht?
6. Angenommen, der ADT Menge wird durch einen binären Suchbaum implementiert.
Welche asymptotische worst-case-Laufzeit besitzt dann die Operation insert, wenn
der Suchbaum bereits n Elemente enthält?
7. Nennen Sie einen Algorithmus, der das all-pairs-shortest-paths-Problem löst.
8. Wieviele Rotationen sind beim Einfügen eines Elements in einen AVL-Baum maximal
notwendig?
Name:
Seite 3
Aufgabe 2 (8 Punkte)
Alle Fragen beziehen sich auf die Programmiersprache Java ab Version 5.
1. Mit welchem Schlüsselwort werden Instanzvariablen deklariert?
2. Sei int a = (11 / 4 == 2) ? 23 : 42; Welchen Wert hat a?
3. Was bedeutet das Schlüsselwort this innerhalb einer Instanzmethode?
4. In welchem Fall fügt der Java-Compiler einer Klasse einen Defaultkonstruktor hinzu?
5. Nach welchem Prinzip werden Parameter bei einem Methodenaufruf übergeben?
6. Wo sind Variablen sichtbar, die mit dem Schlüsselwort private gekennzeichnet sind?
7. Welche Default-Werte besitzen die Einträge in einem boolean-Array?
8. Welche Methode wird beim Start eines Java-Programms zuerst ausgeführt?
Name:
Seite 4
Tragen Sie bei den Aufgaben 3 bis 9 Ihre Lösungen in den vorgesehenen Platz ein.
Aufgabe 3 (6 Punkte)
a) Tragen Sie die 32-Bit-Gleitkommadarstellung nach Definition des Skriptes für die Dezimalzahl 84 in die vorgesehenen Kästchen ein (3 Punkte).
Vorzeichen
Exponent
reduzierte Mantisse
b) Transformieren Sie die folgende, in 32-Bit-Gleitkommadarstellung gegebene Zahl in die
entsprechende Dezimalzahl (3 Punkte).
Vorzeichen
1
Dezimalzahl:
Exponent
reduzierte Mantisse
11111110
11000000000000000000000
Name:
Seite 5
Aufgabe 4 (8 Punkte)
Um ein Osterei verstecken zu können, hat der Osterhase einige Dinge zu beachten. Der
folgende Automat soll überprüfen, ob ein Osterei vom Osterhasen korrekt versteckt wurde.
• Der Osterhase muss im Verlauf des Arbeitsvorgangs das Ei pflücken, kochen, bemalen
und verstecken.
• Zuerst muss er das Ei vom Ostereierbaum pflücken. Es noch am Baum zu bemalen
oder gar zu kochen oder den ganzen Baum zu verstecken, endet in einem sicheren
Fehlschlag.
• Ist das Ei ersteinmal gepflückt, sollte der Hase es nicht ein zweites Mal pflücken
wollen, weil es dabei zerbrechen würde.
• Nach dem Pflückvorgang muss das Ei genau einmal gekocht und mindestens einmal
bemalt werden. Da die Ostereierfarbe wasserfest ist, kann das Bemalen sowohl vor
als auch nach dem Kochen erfolgen.
• Erst wenn das Ei gekocht und bemalt ist, darf der Osterhase es verstecken. Ansonsten
kann es entweder nicht gefunden werden oder beginnt sofort auszutreiben.
• Sollte der Osterhase mit dem Versteck nicht zufrieden sein, kann er das versteckte Ei
beliebig oft neu verstecken, außerdem kann er die Bemalung noch an die Umgebung
des Verstecks anpassen.
a) Geben Sie die Zustandsüberführungsfunktion als Matrix an. (4 Punkte)
Fortsetzung nächste Seite
Name:
Seite 6
b) Zeichnen Sie den Zustandsüberführungsgraphen des Automaten. Markieren Sie den
Startzustand und den oder die gültigen Endzustände. Achten Sie darauf, dass Matrix und
Graph konsistent sind! (4 Punkte)
Name:
Seite 7
Aufgabe 5 (3 Punkte)
Gegeben sei folgende Java-Klasse:
public class Fraglich1 {
public static int methode(int a, int b) {
b = b - a;
a = a + b;
b = a - b;
return b;
}
}
a) Was berechnet die Methode methode der Klasse Fraglich bei Eingabe zweier ganzer
Zahlen a und b? (2 Punkte)
b) Wie ist die Laufzeit der Methode methode in der O-Notation? (1 Punkt)
Name:
Seite 8
Aufgabe 6 (6 Punkte)
Gegeben sei folgende Java-Klasse:
public class Fraglich2 {
public static int methode(int n, int a) {
if (a < 0)
throw new RuntimeException("Ungueltiger Wert fuer a");
int p = 1;
while (a > 0) {
if (a % 2 != 0) {
p *= n;
}
n *= n;
a /= 2;
}
return p;
}
}
a) Was berechnet die Methode methode der Klasse Fraglich2 bei Eingabe zweier ganzer
Zahlen n und a mit a ≥ 0? (4 Punkte)
b) Wie ist die Laufzeit der Methode methode in der O-Notation? (2 Punkte)
Name:
Seite 9
Aufgabe 7 (6 Punkte)
Sortieren Sie die Zahlenfolge
7
3
5
2
6
2
1
nach der Methode des Quicksort. Stellen Sie die Arbeitsweise des Algorithmus dar, indem
Sie jeweils das Ergebnis eines rekursiven Durchlaufs in eine neue Zeile schreiben. Kreisen
Sie das Pivotelement ein und markieren Sie die betrachtete Teilfolge. Notieren Sie außerdem
neben der Zeile, welche Elementpaare in der Zeile jeweils getauscht wurden. Achten Sie
dabei auch auf Elemente, die mit sich selbst getauscht werden.
7
3
5
2
6
2
1
getauschte Elementpaare:
Name:
Seite 10
Aufgabe 8 (3 Punkte)
Nennen Sie jeweils ein Sortierverfahren, das für die jeweiligen Komplexitätsklassen in der
O-Notation in Frage kommt. Beziehen Sie sich dabei auf die Sortierverfahren aus der Vorlesung.
Sortierverfahren
best case
worst case
O(n · log n)
O(n · log n)
O(n)
O(n2 )
O(n · log n)
O(n2 )
Name:
Seite 11
Aufgabe 9 (4 Punkte)
Gegeben seien die beiden Hashfunktionen
h1 (x) = x2 mod 13 und
h2 (x) = 3x mod 7
Fügen Sie die Zahlen 7, 9, 16, 6 in dieser Reihenfolge gemäß der Hashfunktion h1 in
die folgende, schon teilweise belegte Hashtabelle ein. Gehen Sie nach dem Verfahren des
geschlossenen Hashings vor und verwenden Sie als Sondierungsverfahren Double Hashing
mit der Hashfunktion h2 .
h(x)
Element x
0
1
2
3
4
4
5
6
7
8
9
10
11
12
10
Name:
Seite 12
Bei den Aufgaben 10 und 11 müssen Sie selber etwas zeichnen. Nutzen Sie den dafür
vorgesehenen Platz.
Aufgabe 10 (5 Punkte)
11
Gegeben sei folgender Suchbaum:
16
5
3
1
9
7
4
6
14
13
15
8
a) Löschen Sie aus dem Baum den Schlüssel 16 und zeichnen Sie den resultierenden Baum.
(2 Punkte)
b) Löschen Sie aus dem Baum den Schlüssel 11 und zeichnen Sie den resultierenden Baum
erneut. (3 Punkte)
Name:
Seite 13
Aufgabe 11 (7 Punkte)
Gegeben sei folgender AVL-Baum:
26
7
3
1
35
10
40
4
a) Fügen Sie in den Baum den Schlüssel 42 ein, indem Sie den Knoten direkt in den obigen
AVL-Baum einzeichnen. Versehen Sie den kompletten Baum mit Balancen. (1 Punkt)
Führen Sie eine eventuell notwendige Rotation aus und zeichnen Sie den reorganisierten
Baum erneut. Vermerken Sie, welche Rotation Sie verwenden haben. (2 Punkte)
b) Fügen Sie in den neu gezeichneten Baum in Aufgabenteil a) den Schlüssel 6 ein und
versehen Sie den kompletten Baum mit Balancen. (1 Punkt)
Führen Sie die notwendige Rotation aus und zeichnen Sie den reorganisierten Baum unten
nochmals. Vermerken Sie die Art der Rotation, die Sie verwendet haben. (3 Punkte)
Name:
Seite 14
Tragen Sie bei den Aufgaben 12 und 13 Ihre Lösungen in den vorgesehenen Platz ein.
Aufgabe 12 (6 Punkte)
Gegeben sei der folgende gerichtete, gewichtete Graph G = (V, E):
∞
∞
4
B
D
6
5
1
0
A
8
3
C
∞
F
2
9
2
∞
2
E
3
∞
Berechnen Sie mit dem Algorithmus von Dijkstra kürzeste Wege von Knoten A zu allen
anderen Knoten in G. Jedesmal, wenn im Verlauf des Algorithmus der Distanzwert für
einen Knoten aktualisiert wird, schreiben Sie den neuen Wert in das nächste freie Kästchen
neben den Knoten in der obigen Abbildung. Markieren Sie abschließend diejenigen Kanten
in der Abbildung, die zu den gefundenen kürzesten Wegen gehören. (6 Punkte)
Name:
Seite 15
Aufgabe 13 (8 Punkte)
Betrachten Sie den folgenden gerichteten Graph G = (V, E). Nehmen Sie in den folgenden
beiden Aufgabenteilen an, dass G in Adjazenzlisten-Darstellung gegeben ist und dass alle
Adjazenzlisten jeweils alphabetisch aufsteigend sortiert sind. Sollten Sie einen Fehler
machen, streichen Sie die falsche Lösung deutlich durch und nutzen Sie die Ersatzgraphen
auf der nächsten Seite.
a) Führen Sie auf G eine Tiefensuche (Depth First Search, DFS), beginnend bei Knoten
A durch. Beschriften Sie jeden Knoten mit der Nummer, die ihm während der Tiefensuche
zugewiesen wird. Der Knoten A erhält die Nummer 0. Markieren Sie außerdem diejenigen
Kanten, über die jeweils bislang noch unbesuchte Knoten entdeckt werden. (4 Punkte)
0
A
H
B
G
I
K
J
F
E
C
D
b) Führen Sie auf G eine Breitensuche (Breadth First Search, BFS), beginnend bei
Knoten E durch. Beschriften Sie alle Knoten in der Reihenfolge ihrer Entdeckung. Der
Knoten E erhält die Nummer 0. Markieren Sie außerdem diejenigen Kanten, über die
jeweils bislang noch unbesuchte Knoten entdeckt werden. (4 Punkte)
A
H
B
G
I
K
J
F
E
0
D
C
Name:
Seite 16
Ersatzgraph zu Aufgabenteil a):
0
A
H
B
G
I
K
J
F
E
D
C
A
B
Ersatzgraph zu Aufgabenteil b):
H
G
I
K
J
F
E
0
D
C
Name:
Seite 17
Bei den Aufgaben 14 bis 16 müssen Sie selbst einige Zeilen Java-Code schreiben. Nutzen
Sie den vorgesehenen Platz zwischen den geschweiften Klammern.
Aufgabe 14 (5 Punkte)
Eine natürliche Zahl, die durch ihre eigene Quersumme teilbar ist, heißt Harshad-Zahl.
Ergänzen Sie in der gegebenen Klasse Harshad die Methode isHarshad, die überprüft, ob
eine als Parameter übergebene Zahl eine Harshad-Zahl ist.
public class Harshad {
public static boolean isHarshad(int zahl) {
if (zahl <= 0)
throw new RuntimeException("Fehler: zahl ist nicht positiv!");
}
}
Name:
Seite 18
Aufgabe 15 (5 Punkte)
Die Stirling-Zahl zweiter Art Sn,k ist eine Zahl aus der Kombinatorik. Sie gibt die Anzahl
der Möglichkeiten an, eine n-elementige Menge in k nichtleere disjunkte Teilmengen
aufzuteilen.
Berechnen lässt sich die Stirling-Zahl über die rekursive Formel
Sn,k = Sn−1,k−1 + k · Sn−1,k
mit S0,0 = Sn,n = 0 und Sn,0 = S0,k = 1 für alle n, k > 0.
Implementieren Sie diese rekursive Formel. Ergänzen Sie dazu die Methode S in der Klasse
Stirling.
public class Stirling {
public static int S(int n, int k) {
if (n < 0 || k < 0)
throw new RuntimeException("Fehler: n oder k ist nicht positiv!");
}
}
Name:
Seite 19
Aufgabe 16 (12 Punkte)
Implementieren Sie den abstrakten Datentyp Liste mit Hilfe des ADTs Keller. Ergänzen
Sie dazu die leeren Methoden in der Klasse KellerListe.
Eine KellerListe speichert alle Listenelemente, die vor dem aktuellen Element liegen,
in einem Keller davor und alle übrigen Listenelemente in einem zweiten Keller dahinter.
Das aktuelle Element der KellerListe ist das oberste Element des Kellers dahinter. Die
Elemente, die in der KellerListe gespeichert werden, sind vom Typ Object.
Achten Sie auf eine geeignete Fehlerbehandlung, indem Sie im Fehlerfall eine
RuntimeException werfen.
public class KellerListe implements Liste {
private Keller davor, dahinter;
public KellerListe() {
davor = new VerweisKeller();
dahinter = new VerweisKeller();
}
public boolean empty() {
}
public boolean endpos() {
}
public void insert(Object x) {
}
Fortsetzung nächste Seite
Name:
public void advance() {
}
public void reset() {
}
public Object elem() {
}
public void delete() {
}
}
Seite 20
Herunterladen