Universität Leipzig Algorithmen und Datenstrukturen I Institut für Informatik WS 2015/2016 Serie 3 Bioinformatik/IZBI Prof. P.F. Stadler, Ausgabe am Abgabe am Seite C. Hoener, S. Will 23.11.2015 30.11.2015 1/2 Algorithmen und Datenstrukturen I WS 2015/2016 Serie 3 11 (6 Punkte) Quickes Sortieren Gegeben sei folgende Zahlenfolge in einem 0-basierten Array A: 7 43 47 31 57 3 23 Sortieren sie diese mit der in-situ Variante dieses Verfahrens laut Vorlesung 5, Folie 4. Listen sie wie folgt alle Zwischenschritte auf: geben sie für jeden Aufruf der Funktion qsort(A,l,r), ment piv, den l<r, die Parameter l und r an, sowie das berechnete Pivotelevon A (mit markierter Teilliste) nach Abarbeitung der äusseren die rekursiven Aufrufe. Ein Aufruf qsort(A,2,5) könnte also so bei dem Inhalt do/while-Schleife und beschrieben werden: l=2; r=5; piv=A[3]=31; 7 43 3 31 57 47 23 ; qsort(A,2,2); qsort(A,4,5) Vergessen sie keine rekursiven Aufrufe und listen sie die Aufrufe in der korrekten Reihenfolge. Zur Erinnerung: ganzzahlige Division rundet immer ab, z.B. 5/2=2. 12 (4 Punkte) Schlimmstes Quicksort Ordnen sie, wenn möglich, die Elemente 1, 2, . . . , 7 in einem Beispieldatenfeld der Gröÿe Quicksort maximale Schritte benötigt. 7 duplikatfrei so an, dass die Sortierung mit Betrachten sie dabei die Fälle, dass als das Pivotelement a) stets das mittlere Element (mit Abrunden des Indexes) b) stets das letzte Element c) stets ein zufälliges Element gewählt wird. Begründen sie Ihr Ergebnis. 13 (5 Punkte) Sortieren mit Schlangen Gegeben sei eine Implementierung des ADT Priority Queue (Vorrangwarteschlange, siehe Vorlesung 3, Folie 20) für allgemeine Schlüssel (und beliebige Ordnungen). a) Beschreiben sie eines allgemeinen Sortieralgorithmus, der die Operationen des ADT Priority Queue verwendet. Geben sie eine exakte Beschreibung als Pseudocode unter korrekter Anwendung der Operationen des ADT (laut Denition in der Vorlesung). Der Algorithmus sortiere ein 0-basiertes Arrays A, so dass Elemente höherer Priorität niedrigere Indizes erhalten. Zusatzfrage: Welches nicht-elementare Sortierverfahren aus der Vorlesung funktioniert grundsätzlich auf die selbe Weise? Universität Leipzig Algorithmen und Datenstrukturen I Institut für Informatik WS 2015/2016 Serie 3 Bioinformatik/IZBI Prof. P.F. Stadler, Ausgabe am Abgabe am Seite C. Hoener, S. Will 23.11.2015 30.11.2015 2/2 b) Jemand behauptet, dass die gegebene Implementierung des ADT 1) zum Vergleich der Schlüssel ausschlieÿlich paarweise Vergleichsoperationen (und Verschiebung von Datensätzen) verwendet und 2) alle Operationen CREATE, INIT, INSERT, DELETE, MIN und EMPTY in jeweils konstanter Zeit auf einem Standardrechner ablaufen. Begründen sie exakt warum diese Behauptung falsch sein muss! Vergleichen sie dazu die sich aus der Behauptung ergebende Komplexität ihres Sortierverfahrens mit ihrem Wissen über Sortieralgorithmen. Interessanterweise müssen sie dazu die konkrete Implementierung des abstrakten Datentyps nicht kennen. 14 (4 Punkte) Sortieren in Strömen Gegeben sei ein Array A von Buchstaben. A Sortieren sie das Array A = [ l m n o p a b c e d f h g i j k ] aufsteigend alphabetisch je einmal mit a) nicht-rekursivem Merge-Sort laut Vorlesung 6, Folie 5 und b) natürlichem (nicht-rekursivem) Merge-Sort laut Vorlesung 6, Folie 9. Folgen sie genau den in der Vorlesung gegebenen Algorithmen. Geben sie (wie in den Beispielen der Vorlesung) nach jedem Durchlauf der äusseren Schleife den Arrayinhalt an und markieren sie die Grenzen zwischen den jeweils bereits vom Algorithmus sortierten (bzw. als sortiert erkannten) Teillisten. 15 (6 Punkte) Reihenweise Haufen Gegeben sei ein 1-basiertes Array A = [ 1 2 5 3 6 8 4 ] a) Interpretieren sie das Array als Darstellung eines Binärbaums (wie in Vorlesung 5, Folie 17 beschrieben) und geben sie diesen Binärbaum an. (2 Punkte) b) Senken sie nacheinander den Schlüssel 5 (mit Arrayindex 3) und dann (im dadurch entstandenen Array bzw. Baum) den Schlüssel 1 (mit Arrayindex 1) ab, um die Heapeigenschaft für A herzustellen (vgl. Vorlesung 5, Folie 17). Die Absenkungen können sie dabei in der Binärbaumdarstellung oder äquivalent direkt auf dem Array durchführen. Geben sie nach jedem der beiden Absenkvorgängen jeweils das resultierende Array an. (4 Punkte) Korrektur zur Vorlesung: Der Algorithmus zum Absenken des Schlüssels stand falsch auf der in Vorlesung 5 gezeigten Folie 14, deshalb hier die korrigierte Fassung: Algorithmus Senke Schlüssel des Knoten ist als der Schlüssel eines Kindes von i, i ab : Falls der Schlüssel von vertausche die Schlüssel von i i kleiner und dem Kind mit grösstem Schlüssel und senke den Schlüssel dieses Kindknotens ab.