1 - oth-regensburg.de

Werbung
Fachhochschule Regensburg
Probeklausur
Prüfungsfach: AD
Name: ______________________________
Aufgabensteller: Prof. Sauer
Vorname:______________________________
Semester: _______ Matrikel-Nr.: ___________
Prüfungstermin: 19.01.2004
Zugel. Hilfsmittel: keine Einschränkung
Arbeitszeit: 90 Minuten
Anzahl der erreichten Punkte: _____________
Benotung: ______________________________
Erstprüfer: _______________________________
Zweitprüfer: ____________________________
Bewertung: Aufgabe 2: 10 Punkte Aufgabe 3: 8 Punkte Aufgabe 4: 15 Punkte
Aufgabe 5: Punkte Aufgabe 1: Punkte
Aufgabe 1: Deterministische Skip-Listen
Gegeben ist die folgende Datenstruktur, die eine deterministische Skip-Liste mit einer Lückengröße bis zu
(einschl.) 3 Elementen zeigt.
∞
∞
25
10
5
25
10
15
35
20
25
27
∞
45
30
35
40
45
∞
50
Diese Datenstruktur enthält eine Reihe horizontal und vertikal verketteter Listen. Die logische Struktur lässt sich
folgendermaßen beschreiben:
5
10
15
20
25
27
30
35
40
45
50
Die verketteten Listen setzen sich aus Knoten zusammen, die durch folgende Klasse beschrieben werden:
1
class SkipNode
{
Comparable element;
// Daten im Knoten
SkipNode
right;
// Rechte Verkettung
SkipNode
down;
// Verkettung nach unten
// Konstruktoren
SkipNode( Comparable theElement )
{
this( theElement, null, null );
}
SkipNode( Comparable theElement, SkipNode rt, SkipNode dt )
{
element = theElement;
right
= rt;
down
= dt;
}
}
Gegeben ist außerdem noch ein Teil der Klasse DSL (Deterministic Skip List), für die drei wichtige Methoden
zu implementieren sind:
- die Initialisierungsroutine
die Methode find(), die ein Element x in der deterministischen Skip-Liste sucht. Falls x nicht gefunden wird,
soll null zurückgegeben werden, andernfalls der Skip-Node, in dem sich Element x befindet
- die Methode insert(), die ein Element x in der Skip-Liste einfügen soll.
Benütze das folgende Gerüst für die Klasse DSL als Vorlage für die Implementierung der drei Methoden.
public class DSL
{
/* The DSL header. */
private SkipNode header;
private Comparable infinity;
private SkipNode bottom = null;
private SkipNode tail
= null;
/* Konstruktor */
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
}
/* Einfuegen in die DSL */
______________________________________________________________________
______________________________________________________________________
2
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
/* Finde ein Element x in der DSL
x ist der zu suchende Parameter
Rückgabe ist der Skip-Node, der x enthält
bzw. null, falls nicht gefunden */
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
3
__________________________________________________________________
}
/*
Interne Methode zum Ermitteln des im Knoten abgelegten Werts
Parameter t beschreibt den Knoten.
*/
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
// Test program
public static void main( String [ ] args )
{
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
}
}
Aufgabe 2: Graphen-Algorithmen (Dijkstra)
H. G. ist Betreiber eines Entsorgungsunternehmens und beabsichtigt den Kauf einer neuen Sortiermaschine für
Werkstoffe. Da die Betriebs- und Wartungskosten einer solchen Anlage aufgrund der Beanspruchung
voraussichtlich in Abhängigkeit der Nutzungsdauer stark ansteigen werden, könnte es sinnvoll sein, diese nach
einiger Zeit zu ersetzen.
Geplant wird bis zur Fertigstellung der Müllverbrennungsanlage für einen Zeitraum von vier Jahren. Die
geschätzten Kosten cij (in Tsd. DM) für den Kauf zu Beginn des Jahres i und Betrieb in den Jahren i bis j – 1
abzüglich eines Erlöses aus dem Wiederverkauf im Jahre j sind in nachfolgender Matrix zusammengestellt.
Insgesamt ist man an einer Minimierung der Gesamtkosten interessiert
4
cij
1
2
3
4
2
3
4
5
25
-
45
30
-
90
50
40
-
160
90
55
50
1. Formuliere das gegebene Problem als "Kürzestes-Wege-Problem". Zeichne den zugehörigen Graphen und
erläutere die Bedeutung der Knoten sowie die Bewertung der Pfeile.
5
2. Löse das Problem mit Hilfe des Dijkstra-Algorithmus.
3. Sollte die gekaufte Sortieranlage zwischenzeitlich durch eine neue ersetzt werden? Falls Neubeschaffung
nötig, wann sollte sie erfolgen?
_______________________________________________________________________________________
4. Wie hoch sind die Gesamtkosten für die Dauer von 4 Jahren?
_______________________________________________________________________________________
Aufgabe 3: AVL- und Bayer-Bäume
1. AVL-Bäume
Gegeben ist die Darstellung eines AVL-Baums:
330
250
70
548
289
336
307
601
593
Gib an, welche Gestalt der AVL-Baum nach folgenden Operationen annimmt.
a) Einfügen eines Knoten mit dem Schlüsselwert 590
b) Einfügen des Knotens mit dem Schlüsselwert 333
6
960
c) Löschen des Knoten mit dem Schlüsselwert 289
d) Löschen des Knoten mit dem Schlüsselwert 548
2. Bayer-Baum
Die folgende Zahlenfolge soll die Eingabe von Schlüsselwerten für einen 5ären Bayer-Baum beschreiben: 1, 2,
3,4,5, 6, 7, 8, 9,10.
1. Wie sieht nach Eingabe dieser Schlüssel die Struktur des resultierenden Bayer Baums aus? Anzugeben ist die
logische Anordnung der Knoten im Bayer-Baum und die Verknüpfung der Seiten (Blöcke) in einer Datei, die
den Bayer-Baum persistent enthält.
a) Logische Anordnung der Knoten im Bayer-Baum
b) Struktur vom Bayer-Baum in der in Seiten aufgeteilten Datei
7
2. Gelöscht wird der Schlüssel mit dem Wert 2. Evtl. frei werdende Blöcke (Seiten) sollen unter dem Anker
"freie Liste" linear verkettet werden.
a) Logische Anordnung der Knoten im Bayer-Baum
b) Struktur vom Bayer-Baum in der in Seiten aufgeteilten Datei
Aufgabe 4: Minimum-Heap
1. Gegeben ist ein Array A mit den folgenden Schlüsselwerten
A[0]
50
A[1]
20
A[2]
60
A[3]
65
A[4]
15
A[5]
25
A[6]
10
A[7]
30
A[8]
4
A[9]
45
Die Komponenten des Array sollen so umgeordnet werden, daß sie einem Minimum-Heap ("die nachfolgenden
Schlüssel sind größer als der Vorgänger") entsprechen. Gib den Heap in der Gestalt eines binären Baum an.
2. Gegeben ist ein Minimum-Heap in der Gestalt eines binären Baums:
5
10
11
25
50
20
52
55
22
Hinzugefügt wird der Schlüssel mit dem Wert 8. Zeige mit allen erforderlichen Arbeitsschritten, welche
Binärbaum-Gestalt der "Heap" annimmt.
8
3. Gegeben ist ein Minimum-Heap in der Gestalt eines binären Baums
5
10
11
25
50
20
52
22
Zeige, wie dieser Heap zur Ausgabe einer sortierten Schlüsselwertfolge benutzt werden kann.
Gib alle erforderlichen Zwischenschritte an!
9
55
10
Aufgabe 5: Programmieraufgabe: Löschen im binären Suchbaum
Die folgende Methode dient zum entfernen eines Knotens mit dem Datenelement „x“ aus einem binären
Suchbaum:
private BinaerBaumknoten remove(Comparable x, BinaerBaumknoten b)
{
if( b == null )
return b;
// nichts gefunden; tue nichts
if( x.compareTo(b.daten) < 0 )
b.links = remove(x, b.links );
else if( x.compareTo(b.daten) > 0 )
b.rechts = remove( x, b.rechts );
else if( b.links != null && b.rechts != null ) // Zwei Kinder
{
b.daten = findMin(b.rechts).daten;
b.rechts = remove(b.daten, b.rechts);
}
else
b = ( b.links != null ) ? b.links : b.rechts;
return b;
}
1. Nach welchen Verfahren wird hier gelöscht? _________________________
2. Beschreibe diese Verfahrenstechnik.
____________________________________________________
____________________________________________________
____________________________________________________
3. Im Mittelpunkt dieser Verfahrensweise steht die Methode findMin(). Gib eine Implementierung dieser
Methode an.
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
4. Zeige anhand des folgenden binären Suchbaums, welche Gestalt der binäre Suchbaum nach dem Entfernen
des Knotens mit dem Datenelement 2 annimmt.
11
5. Gib eine Alternative zu der unter 2. Beschriebenen Verfahrenstechnik an.
____________________________________________________
____________________________________________________
____________________________________________________
6 Zeige anhand des folgenden binären Suchbaums, welche Gestalt der binäre Suchbaum gemäß der unter 5.
Angegebenen Alternative annimmt, falls der Schlüssel mit dem Datenelement 2 gelöscht wird
7. Nach der unter 5. angebenen Alternative müßte eine andere Routine im Mittelpunkt der Bearbeitung stehen.
Gib eine Implementierung dieser Routine an.
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
12
Herunterladen