Algorithmen und Datenstrukturen I WS 2015/2016 Serie 3

Werbung
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.
Herunterladen