1 Algorithmen und Datenstrukturen Sommersemester 2014 Nachname: Vorname: Matrikelnummer: Note: Prof. Dr. Letschert L¨osungen bitte auf eigene Bl¨atter eintragen! Geben Sie auf jedem Blatt Ihren Namen und Ihre Matrikelnummer an. Aufgabe 1 (3*5 = 15 Punkte) 1. Beschreiben Sie kurz und in eigenen Worten das Sortier-Verfahren Selection–Sort. Geben Sie dazu die Schritte an, die bei der Sortierung eines Arrays mit den Zahlen 5,2,4,3,1 ausgef¨uhrt werden. 2. Beschreiben Sie kurz und in eigenen Worten das Sortier-Verfahren Insertion–Sort. Geben Sie dazu die Schritte an, die bei der Sortierung eines Arrays mit den Zahlen 5,2,4,3,1 ausgef¨uhrt werden. 3. Definieren Sie in Java eine statische Methode, die ein beliebig großes Feld von int-Werten aufsteigend sortiert und dabei den Algorithmus Selection–Sort verwendet. Aufgabe 2 (5*5 = 25 Punkte) Die Menge L der Listen von ganzen Zahlen kann induktiv definiert werden: • Basis: Die leere Liste ist ein Element von L. • Induktion: Ist l eine Liste von ganzen Zahlen, also ein Element von L, dann ist auch i · l (l mit vorgesetzter ganzer Zahl i) in L. Aufgabe: 1. Implementieren Sie in Java (statische Methode mit Argument vom Typ List<Integer>) einen Algorithmus, der die Summe der Zahlen einer so definierten Liste berechnet und der rekursiv u¨ ber diese (!) Struktur von L definiert ist. 2. Statt als Objekte vom Typ List<Integer> k¨onnen die Listen auch mit folgendem Typ selbst definiert werden: interface L {} class Empty implements L {} class Node implements L { private int first; private L rest; public Node(int first, L rest) { this.first = first; this.rest = rest; } } Erweitern Sie diese Definitionen derart, dass die Summe einer Liste mit Hilfe einer polymorphen Methode sum berechnet wird. 3. Handelt es sich bei der Berechnung der Summe der Listen-Elemente um einen Reduziere-und-Herrsche– Algorithmus: in beiden Varianten (Teilaufgabe 1 und 2), in einer der beiden Varianten, oder in keiner? 2 4. Erweitern Sie das Interface und seine Implementierungen von Teilaufgabe 2 um eine Methode, mit der der Mittelwert der Listenelemente berechnet werden kann. 5. Handelt es sich bei Ihrer Berechnung des Mittelwerts um einen Reduziere-und-Herrsche–Algorithmus? Aufgabe 3 (4*5 = 20 Punkte) 1. Was genau bedeutet die Aussage “Algorithmus A hat eine Laufzeit von T (n) = 5 ∗ n2 + 7n + 3”? 2. Was genau bedeutet die Aussage “Algorithmus A hat die Laufzeitkomplexit¨at O(n2 )”? 3. Warum ist die Aussage “Algorithmus A hat die Laufzeitkomplexit¨at O(n2 + 7n + 3)” unsinnig? 4. Warum ist die Aussage “Algorithmus A ist NP-vollst¨andig” unsinnig? Aufgabe 4 (6*5 = 30 Punkte) 1. Handelt es sich bei dem Konzept “Graph” um eine Datenstruktur oder um einen Datentyp? Begr¨unden Sie Ihre Antwort kurz. (Ein bis zwei S¨atze reichen.) 2. Wenn das n-Dame–Problem mit einem Algorithmus gel¨ost wird, der auf dem Prinzip der ersch¨opfenden Suche beruht, wie viele kombinatorische Objekte m¨ussen dann bei einem Schachbrett mit 4 × 4 Feldern untersucht werden? Erl¨autern Sie den Wert kurz. 3. Welche Problemstellungen eignen sich f¨ur Algorithmen nach dem Backtracking–Verfahren. Ist das n-DameProblem ein solches Problem? 4. Das n–Dame–Problem ist NP-vollst¨andig. Was genau bedeutet das: welche Kriterien m¨ussen NP-vollst¨andige Probleme erf¨ullen? 5. Welche Datentypen (Interfaces) der Java-API haben eine implementierende Klasse, die die Datenstruktur Baum verwendet? 6. Welche Datentypen / Problemstellungen k¨onnen mit der Datenstruktur Baum gut gel¨ost werden und welche Alternative zu B¨aumen wird ebenfalls sehr oft f¨ur diese Problemstellung eingesetzt? Aufgabe 5 (5 + 5 = 10 Punkte) Eine Priorit¨atswarteschlange ist eine Warteschlange, in die Objekte eingef¨ugt und nach ihrer “Priorit¨at” entnommen werden. Sie hat zwei Operationen • add : Ein Element einf¨ugen • remove: Das Element mit der h¨ochsten Priorit¨at herausholen. Priorit¨aten sind eine Eigenschaft der in der Schlange gespeicherten Elemente. Die Eigenschaft eine Priorit¨at zu haben, kann auf vielerlei Arten von den Elementen realisiert und von der Priorit¨atswarteschlange gefordert werden. Priorit¨at kann beispielsweise als Vergleichbarkeit interpretiert werden, und Vergleichbarkeit kann dann zur Laufzeit gepr¨uft werden: public interface PriorityQueue<E> { /** * Fuegt ein Element in die Queue ein. * @param e das einzufuegende Element * @throws ClassCastException falls e nicht mit den anderen Elementen der Queue verglichen werden kann. * * @throws NullPointerException falls e == null */ 3 void add(E e); /** * Entnimmt ein Element aus der Queue. * @return das kleinste Element entsprechend der Ordnung der Elemente von E. * @throws NoSuchElementException falls die Queue leer ist. */ E remove() throws NoSuchElementException; } Eine triviale Implementierung mit einer Priorit¨at die der nat¨urlichen Ordnung der Elemente entspricht, kann mit einer Cast-Operation und einem Methodenaufruf realisiert werden: import import import import import java.util.Collections; java.util.Comparator; java.util.LinkedList; java.util.List; java.util.NoSuchElementException; public class ListPriorityQueue<E> implements PriorityQueue<E> { private List<E> store = new LinkedList<>(); @Override public void add(E e) throws ClassCastException, NullPointerException { store.add(e); Collections.sort(store, new Comparator<E>() { @Override public int compare(E o1, E o2) { // HIER ERGAENZEN ! return ( ( ...?????... )o1 ) . ?????(o2); } }); } @Override public E remove() throws NoSuchElementException { E e = store.remove(0); return e; } } 1. Welcher Cast und welcher Methodenaufruf sind hier notwendig / m¨oglich um das gew¨unschte Verhalten zu erreichen? 2. Eine Nutzung mit Objekten einer Klasse wie class Blub{} wird dann nat¨urlich eine Exception werfen. Besser w¨are es, wenn Klassen wie Blub gar nicht erst als generischer Parameter verwendet werden k¨onnen und darum add nie die ClassCastException werfen wird. Modifizieren Sie das Interface PriorityQueue und die Implementierung ListPriorityQueue entsprechend.
© Copyright 2024 ExpyDoc