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