Grundlagen der Programmierung PRG-1

Werbung
Prof. Dr. O. Drobnik
Robert-Mayer-Str. 11-15
Tel.: +049-(0)69-798- 28362
Yann Lorion
Robert-Mayer-Str. 11-15
Tel.: +049-(0)69-798-28358
[email protected]
Vorlesung PRG-1, WS 08/09
Ausgabe: 03.12.2008
Abgabe: 10.12.2008
Übungsblatt 7
Bemerkung:
Es dürfen keine Lösungen aus dem Skript, dem Internet oder anderen Quellen „abgeschrieben“ werden. Diese
Quellen dürfen nur mit Quellenangaben verwendet werden und es muss ein Eigenanteil in den Lösungen deutlich
erkennbar sein. Es ist also notwendig, die Themen möglichst gut zu verstehen, um dann die Antworten auf die
gestellten Fragen mit eigenen Worten formulieren zu können.
Aufgabe 7.1: Funktionsweise fremder Programme identifizieren (2 Punkte)
Gegeben ist folgendes Programm
def unbekannt(input):
result = []
a = len(input)
b = 0
while a > b:
temp = []
c = b
while c < a:
temp.append(input [b])
result.append(temp)
c += 1
b += 1
return result
Beschreiben Sie, was der Aufruf unbekannt(input) auf einer Liste bewirkt und begründen Sie Ihre Antwort.
Aufgabe 7.2 Greedy - Sortieren (4 Punkte)
Programmieren Sie folgenden Greedy-Sortieralgorithmus:
Eingabe: Liste L mit Elementen der natürlichen Zahlen
Ausgabe: Sortierte Liste
Vergleichen Sie der Reihe nach zwei benachbarte Elemente der Liste und vertauschen Sie diese, falls sie
in der falschen Reihenfolge vorliegen. Gehen Sie wiederholt die Liste durch, bis sie sortiert ist und geben
Sie diese zurück.
Überlegen Sie sich drei zu sortierende Listen und begründen Sie, warum diese Listen besonders zum
Testen geeignet sind (mindestens drei Listen mit mehr als 10 Elementen).
Seite 1/2
Prof. Dr. O. Drobnik
Robert-Mayer-Str. 11-15
Tel.: +049-(0)69-798- 28362
Yann Lorion
Robert-Mayer-Str. 11-15
Tel.: +049-(0)69-798-28358
[email protected]
Vorlesung PRG-1, WS 08/09
Ausgabe: 03.12.2008
Abgabe: 10.12.2008
Aufgabe 7.3 Lerngruppenaufgabe: Divide-and-Conquer (4 Punkte)
Gegeben sei eine Liste list von natürlichen Zahlen (int). Implementieren Sie in Python eine Funktion
smallestDistance(list), die die kleinste positive Differenz zwischen zwei Zahlen der Liste
zurückgibt.
Die Lösung dieser Aufgabe soll nach dem divide-and-conquer Prinzip erfolgen. Hierzu muss die Liste in
zwei Teillisten geteilt werden, auf denen die Funktion rekursiv aufgerufen wird. Überlegen Sie sich,
welche Probleme hierbei auftauchen und wie Sie diese beheben können. Überlegen Sie sich Fälle, die
genau diese Probleme testen.
Hinweis: Die Liste darf von Ihrer Funktion sortiert werden.
Aufgabe 7.4 Bonusaufgabe - Mergesort (3 Punkte)
Verändern Sie die in der Vorlesung vorgestellte Funktion merge(l1,l2) auf folgende Weise:
•
Die Funktion merge(l1,l2) erhält als Eingabe zwei sortierte Listen l1 und l2.
•
Daraufhin wird eine Liste lst erzeugt, die aus der Konkatenation von l1 und der umgedrehten Liste l2
entsteht. Somit stehen die kleinsten Werte am Anfang und am Ende von lst und die größten Werte in der
Mitte.
•
Zu Beginn wird der erste und der letzte Eintrag der Liste mit einander verglichen und der kleinere von beiden
in eine Ergebnisliste geschrieben. Sollte der erste Wert aus lst der kleinere gewesen sein, so wird im
nächsten Schritt der zweite mit dem letzten Wert verglichen (andernfalls der erste mit dem vorletzten) und
wieder der kleinere in die Ergebnisliste eingefügt, etc.
•
Die Rückgabe von merge(l1,l2) ist eine sortierte Liste, die alle Elemente aus l1 und l2 enthält.
Was ist der Vorteil gegenüber der in der Vorlesung vorgestellten Methode?
Benutzen Sie die gleichen Testlisten wie in Aufgabe 7.2.
Seite 2/2
Herunterladen