Fachhochschule Mannheim Hochschule für Technik und Gestaltung Fachbereich Informatik Studiengang Bachelor of Computer Science Algorithmen und Datenstrukturen Wintersemester 2003 / 2004 Name:... Vorname:... Matrikel-Nr.:... Unterschrift:... Hinweise: 1.) Schreiben Sie Ihren Namen und Ihre Matrikelnummer zu Beginn auf das Deckblatt der Klausur. Überprüfen Sie, ob die Klausur vollständig ist. 2.) Bearbeiten Sie die Aufgaben möglichst auf den jeweiligen Blättern. Der Platz auf dem Aufgabenblatt ist so bemessen, daß er für die Lösung der Aufgabe ausreicht. Andernfalls verwenden Sie die Rückseite oder ein mit Ihrem Namen, Ihrer Matrikelnummer und der Aufgabennummer gekennzeichnetes separates Blatt. 3.) Es sind keine Hilfsmittel (Taschenrechner, Mitschrift, Bücher, o.ä.) außer einem Schreibgerät zugelassen. 4.) Schreiben Sie mit dokumentenechten Stiften. Mit Bleistiften, Tintenkiller o.ä. erstellte Lösungen sind ungültig! Rotschreibende Stifte sind ebenfalls verboten! Schreiben Sie bitte leserlich! Aufgabe 1 2 3 4 5 6 Σ Erreichbare Punkte 12 15 41 15 15 22 120 Erreichte Punkte V i e l E r f o l g!!! Note:
Aufgabe 1 EBNF 12 Punkte Für die Syntax von Email-Adressen liegt folgender Vorschlag in EBNF vor: Ema name [. name ] @ [subdomain. ] domain. subdomain name [ - name ]. domain de com net org. name letter {symbol. letter A... Z a... z. symbol letter 0... 9. Sind die folgenden Beispiele im Sinne der angegebenen Syntax zulässige Email-Adressen? Begründen sie Ihre Aussagen, indem sie die entsprechenden Produktionen angeben. Das Nonterminalsymbol name braucht im Fehlerfall nicht weiter aufgelöst zu werden. a) w.schramm@fh-mannheim.de b) 0815@nowhere.org c) smiley2003@com d) internet.com e) FH2003@donnerstag-der10te-klausur.de f) Viel.Erfolg@ads Lösung: 2
Aufgabe 2 Imperative Algorithmen 15 Punkte Schreiben Sie eine Java-Methode static int search (int [] F, int k), für die binäre Suche des Wertes k im Feld F. Lösung: 3
Aufgabe 3 Sortierverfahren 41 (20 + 5 + 8 + 8) Punkte Gegeben ist die folgende Zahlenfolge: 8 7 2 1 3 9 6 4 a) Geben sie sämtliche Schritte (ein Schritt ist eine Vertauschung und/oder eine Verschiebung) an. Beim Merge Sort geben sie alle Splits und Merges (mit den einzelnen runs) an, die beim Sortieren der Zahlenfolge nach den folgen Sortierverfahren durchgeführt werden. Beim Quicksort kennzeichnen jeden Rekursionsschritt, das jeweilige Pivotelement und bei einem Zahlentausch schreiben sie die resultierende Folge in eine neue Zeile. - Insertion Sort (4 Punkte) - Natürlicher Merge Sort (6 Punkte) - Quicksort (10 Punkte) Lösung: 4
Aufgabe 3 Sortierverfahren Fortsetzung 41 (20 + 5 + 8 + 8) Punkte b) Was versteht man unter der Komplexitätsklasse eines Sortierverfahrens? Geben sie Beispiele zwei unterschiedliche Komplexitätsklassen unter Nennung eines konkreten Sortierverfahrens an. c) Erklären sie anschaulich den Aufwand für den direkten Mergesort (straight mergesort) unter der Annahme, dass die Anzahl der zu sortierenden Elemente eine 2-er Potenz ist. 5
Aufgabe 3 Sortierverfahren Fortsetzung 41 (20 + 5 + 8 + 8) Punkte d) Der Quicksort ist im allgemeinen das schnellste Sortierverfahren. Geben sie ein Beispiel an, für das er langsamer ist als der (beste) Bubble Sort. Begründen sie dieses Beispiel kurz. 6
Aufgabe 4 Lineare Liste 15 Punkte Gegeben ist eine Liste mit folgenden Java-Vereinbarungen: class Node { Element elem; // references any kind of element inherited // from base class Element Node next;... class List { Node head;... List l1, l2; Schreiben Sie eine Methode copydeep, welche die tiefe Kopie einer Liste erzeugt. Durch folgenden Methodenaufruf l2 = l1.copydeep() wird eine tiefe Kopie der Ursprungsliste l1 erzeugt und als Rückgabewert l2 zugewiesen. Sie dürfen alle anderen Listenfunktionen, wie Sie sie aus Vorlesung und Übungen kennen, benutzen. Lösung: 7
Aufgabe 5 Binärbäume 15 Punkte Schreiben Sie eine Java-Methode search für die Klasse BinaryTree, welche einen int-wert ival, in einem binären Baum sucht und eine entsprechenden Wert bei Erfolg (ival wurde gefunden) bzw. Misserfolg (ival wurde nicht gefunden) zurück gibt.. Folgende Vereinbarungen gelten für den Binärbaum: class TreeNode {// Node of a binary tree int val; TreeNode left; TreeNode right; public TreeNode (int i) { // constructor val = i; left = right = null; public TreeNode getleft () { // returns left child return left; public TreeNode getright () { // returns right child return right; class Binaryree { private TreeNode root;..... Lösung: 8
Aufgabe 6 AVL-Bäume 22 (12 + 6 + 4)Punkte a) Fügen sie nacheinander die Werte 10, 9, 8, 11, 12, 15 und 14 in einen AVL-Baum ein. Malen sie den Baum nach jeder einzelnen Einfügeaktion hin. Sofern eine Rebalancierung notwendig ist, geben sie die entsprechende Rebalancierungsmaßnahme an und anschließend den rebalancierten Baum. 9
Aufgabe 7 AVL-Bäume - Fortsetzung 22 (12 + 6 + 4)Punkte b) Wie viele Knoten können sie in den AVL-Baum aus Teil a) maximal einfügen, ohne dass sie ihn wieder rebalancieren müssen? Begründen sie ihre Antwort. c) In der Klasse TreeNode sind bereits Knoten eines normalen Binärbaums vereinbart (genauso wie in Aufgabe 5). Geben sie die Vereinbarung für einen AVLTreeNode an unter Verwendung der Klasse TreeNode an. Geben sie auch den Konstruktor dieser Klasse an. 10