Aufgabenblatt 9 (Matrix-Multiplikation, Fold-Beweise) - Technische

Universität Bielefeld
Technische Fakult¨
at
AG Praktische Informatik
¨
Ubung
zu den Vorlesungen Algorithmen &
Datenstrukturen
Programmieren in Haskell
Wintersemester 2014/2015
Aufgabe 9.1 (8 Punkte): Gegeben sei die Matrix-Kette M1 · M2 · . . . · M6 mit den
folgenden Dimensionen: (8, 17), (17, 5), (5, 55), (55, 9), (9, 4), (4, 77).
1. Bestimmen Sie die optimale Klammerung f¨
ur die Berechnung des oben genannten
Matrix-Ketten-Produkts. Wie hoch ist hierbei der Aufwand in Form von Multiplikationen? Das Kriterium f¨
ur Optimalit¨
at und die Definition von Aufwand wurden
in der Algorithmen & Datenstrukturen-Vorlesung definiert.
2. Schreiben Sie eine Haskell -Funktion aufwand’ :: Dim -> Dim -> Aufw, die den
Aufwand der Multiplikation zweier Matrizen berechnet, wobei
type Dim = (Int, Int) und type Aufw = Int.
3. Im Allgemeinen bestimmt sich der Aufwand zur Berechnung eines Matrix-KettenProdukts nicht nur aus dem Aufwand der finalen Multiplikation, sondern zus¨atzlich
auch aus dem gesamten vorherigen Aufwand. Zur genauen Berechnung des GesamtAufwands ist bei jedem Zwischenschritt notwendig, die Dimensionen der bis dahin
berechneten Matrizen zu kennen. Adaptieren Sie aufwand’ daher so, dass der Gesamtaufwand berechnet wird:
aufwand :: (Dim, Aufw) -> (Dim, Aufw) -> (Dim, Aufw). F¨
ur eine einzelne
Matrix (zeilen,spalten) :: Dim gilt ((zeilen,spalten),0).
4. Schreiben Sie eine Funktion minMat :: [Dim] -> (Dim, Aufw), die den minimalen Aufwand einer Matrix-Ketten-Multiplikation berechnet. Verwenden Sie, falls
m¨oglich, die bereits implementierte Funktion auf Aufgabenteil 3.
5. Die Anzahl m¨
oglicher Klammerungen f¨
ur eine Matrix-Ketten-Multiplikation ist
exponentiell bez¨
uglich der Anzahl enthaltener Matrizen. Mittels dynamischer Programmierung (DP) l¨
asst sich eine optimale Klammerung innerhalb polynomieller
Laufzeit bestimmen. Entwickeln Sie eine DP Variante von minMat, die sich des
Tabellierens von Zwischenergebnissen bedient.
6. In welcher Effizienzklasse liegt die DP Variante von minMat? Begr¨
unden Sie diese
¨
Uberlegung.
Aufgabe 9.2 (3 Punkte):
Beweisen oder widerlegen Sie die folgenden Aussagen:
1. foldr (-) 0 [1..n] = - (foldr (-) 0 [0..n])
2. F¨
ur gerade n gilt: foldr (-) 0 [1..n] = - n/2
Abgabe: Mittwoch, 17.12.2014, 16:00 Uhr. Bearbeitung in 2er Gruppen (alle Namen
und Tutor auf die Abgabe schreiben).
1