Aufgabenblatt 7 (Stückelung, Baum-Topologie, Baum

Werbung
Universität Bielefeld
Technische Fakultät
AG Praktische Informatik
Übung zu den Vorlesungen Algorithmen &
Datenstrukturen
Programmieren in Haskell
Wintersemester 2014/2015
Aufgabe 7.1 (6 Punkte): Ein Baumarkt bezieht Küchen-Arbeitsplatten der Länge
n Meter von einem Hersteller. Um diese an seine Kunden zu verkaufen, werden sie in
kürzere Platten zersägt. Der Verkaufspreis einer Arbeitsplatte richtet sich nach seiner
Länge:
Länge in Metern
Preis in e
1
1
2
5
3
8
4
9
5
10
6
17
7
17
8
20
Wie lässt sich der Gesamt-Verkaufspreis maximieren? Zum Beispiel müsste eine Arbeitsplatte von 8m in eine 6m und eine 2m lange Platte zersägt werden, um den maximalen
Gesamtpreis von 22 e zu erzielen.
Hinweis: Angenommen wir entscheidenen uns ein erstes Stück mit 3m Länge zu
produzieren. Dann müssen wir anschließend ermitteln, ob und wie die verbleibenden
5m zersägt werden sollen. Das Problem besteht also weiterhin, ist aber von 8m auf 5m
reduziert worden.
• Implementieren Sie eine Funktion, die den maximal möglichen Gesamtpreis für
eine gegebene Ausgangslänge n ermittelt. Die durch Zersägen entstehenden Stücke
dürfen nur die in der Tabelle genannten Längen haben, nach denen sich auch die
Preise richten. Ihre Funktion muss die Stückelung nicht mit ausgeben, sondern nur
den Gesamtpreis.
• Ob Sie einen ersten Schnitt bei 3m oder zwei Schnitte bei je 1m und 2m machen
führt in beiden Fällen zu dem Problem, wie die verbleibenden 5m zersägt werden
sollen. Teillösungen (hier das Zersägen einer 5m Platte) werden also mehrfach
benutzt.
Implementieren Sie eine zweite Version Ihrer Funktion aus Teil 1., die sich der dynamischen Programmierung bedient, d.h. Teilergebnisse tabelliert (vielleicht mittels
array?).
Aufgabe 7.2 (2 Punkte):
In der Datenstruktur Tree a für einen Baum
data Tree a = Nil | Leaf a | Br ( Tree a ) ( Tree a )
ist der Konstruktor Nil nicht unbedingt notwendig. Aus Effizienzgründen ist es oft
sinnvoll, möglichst alle Vorkommen von Nil aus dem Binärbaum zu entfernen.
Schreiben Sie eine Funktion delNil :: Tree a -> Tree a, die aus einem Binärbaum
alle Vorkommen von Nil entfernt. Die Reihenfolge der verbleibenden Blätter soll dabei
unverändert bleiben. Wenn ein Binärbaum nur aus Nil besteht, soll das Ergebnis Nil
sein.
1
Universität Bielefeld
Technische Fakultät
AG Praktische Informatik
Aufgabe 7.3 (3 Punkte): Definieren Sie in Haskell Funktionen countbr, balanced
und minmaxpath über Bäumen:
1. countbr :: Tree a -> Int zählt die Anzahl der Verzweigungen (d.h. Br-Konstruktoren)
in einem Baum.
2. Sei k ≥ 0. Ein Baum b ist k-balanciert, falls für jeden Teilbaum (Br l r) von b
gilt:
|countbr l − countbr r| ≤ k
Ein 1-balancierter Baum heißt ausgeglichen. balanced :: Int -> Tree a -> Bool
liefert True gdw. der Baum k-balanciert ist. Dabei ist k das erste Argument von
balanced.
3. Wir betrachten die Menge P aller Pfade in einem Baum b, die bei der Wurzel beginnen und an einem Blatt enden. minmaxpath b liefert ein Paar (lmin , lmax ), wobei
lmin die minimale Länge und lmax die maximale Länge eines Pfades aus P ist. Für
den Baum aus Aufgabe 6.3(2) (rechts) soll minmaxpath :: Tree a -> (Int, Int)
das Ergebnis (2, 5) liefern.
Abgabe: Mittwoch, 03.12.2014, 16:00 Uhr. Bearbeitung in 2er Gruppen (alle Namen
und Tutor auf die Abgabe schreiben).
2
Herunterladen