Dyamische Programmierug Matrixketteprodukt
Das Optimalitätsprizip Typische Awedug für dyamisches Programmiere: Optimierugsprobleme Eie optimale Lösug für das Ausgagsproblem setzt sich aus optimale Lösuge für kleiere Probleme zusamme. 2
Ketteprodukt vo Matrize Gegebe: Folge (Kette) A,A 2,...,A vo Matrize Gesucht: Produkt A A 2... A Problem: Orgaisiere die Multiplikatio so, dass möglichst weig skalare Multiplikatioe ausgeführt werde. Defiitio: Ei Matrizeprodukt heißt vollstädig geklammert, we es etweder eie eizele Matrix oder das geklammerte Produkt zweier vollstädig geklammerter Matrizeprodukte ist. 3
Beispiel für vollstädig geklammerte Matrizeprodukte der Kette A,A 2,...,A Alle vollstädig geklammerte Matrizeprodukte der Kette A,A 2,A 3, A 4 sid: ( A ( A 2 ( A 3 A 4 ) ) ) ( A ( ( A 2 A 3 ) A 4 ) ) ( ( A A 2 )( A 3 A 4 ) ) ( ( A ( A 2 A 3 ) ) A 4 ) ( ( ( A A 2 ) A 3 ) A 4 ) 4
Azahl der verschiedee Klammeruge Klammeruge etspreche strukturell verschiedee Bäume. 5
6 Azahl der verschiedee Klammeruge P() sei die Azahl der verschiedee Klammeruge vo A...A k A k+...a ( ) ( ) ( ) ( ) = = = 2 für k k P k P P P ( ) ( ) Zahl te Catalasche 4 4 2 5 = + + Ο + = + C P P π Bem: Fide der optimale Klammerug durch Ausprobiere silos.
A Multiplikatio zweier Matrize = ( a ), B = ( b ), A B = C = ( c ) ij p q ij q r c ij = q k= a ik Algorithmus Matrix-Mult Iput: Eie (p q) Matrix A ud eie (q r) Matrix B Output: Die (p r) Matrix C = A B for i := to p do 2 for j := to r do 3 C[i, j] := 0 4 for k := to q do 5 C[i, j] := C[i, j] + A[i, k] B[k,j] b kj. ij p r Azahl Multiplikatioe ud Additioe: p q r Bem: für zwei Matrize werde hier 3 Multiplikatioe beötigt. Es geht auch mit O( 2.376 ) Multiplikatioe., 7
Matrizeketteprodukt Beispiel Berechug des Produkts vo A,A 2,A 3 mit A :0 00 Matrix A 2 :00 5 Matrix A 3 : 5 50 Matrix a) Klammerug ( ( A A 2 ) A 3 ) erfordert A = (A A 2 ): A A 3 : Summe: 8
Matrizeketteprodukt Beispiel A :0 00 Matrix A 2 :00 5 Matrix A 3 : 5 50 Matrix a) Klammerug (A (A 2 A 3 )) erfordert A = (A 2 A 3 ): A A : Summe: 9
Struktur der optimale Klammerug (A i...j ) = ((A i...k ) (A k+...j )) i k < j Jede optimale Lösug des Matrixketteprodukt Problems ethält optimale Lösuge vo Teilprobleme. Rekursive Bestimmug des Wertes eier optimale Lösug: m[i,j] sei miimale Azahl vo Operatioe zur Berechug des Teilproduktes A i...j : m[i,j] = 0 falls i = j m[i,j] = mi i k< j { [ i, k] + m[ k +, j] + p p p } m i k j,sost s[i,j] = optimaler Splitwert k, für de das Miimum ageomme wird 0
Rekursive Matrixketteprodukt Algorithmus rek-mat-ket(p, i, j) Iput: Eigabefolge p = p 0,p,...,p, p i- p i Dimesioe der Matrix A i Ivariate: rek-mat-ket(p, i, j) liefert m[i, j] if i = j the retur 0 2 m[i, j] := 3 for k := i to j do 4 m[i, j] := mi(m[i,j], p i- p k p j + rek-mat-ket(p, i, k) + rek-mat-ket(p, k+, j)) 5 retur m[i, j] Aufruf: rek-mat-ket(p,, )
2 Rekursives Matrixketteprodukt, Laufzeit Sei T() die Azahl der Schritte zur Berechug vo rek-mat-ket(p,,). ( ) ( ) ( ) (vollst.iduktio) 3 ) ( ) ( 2 ) ( () = = + + + + i k T i T k T k T T T Expoetielle Laufzeit!
Matrixketteprodukt mit dyamischer Programmierug Algorithmus dy-mat-ket Iput: Eigabefolge p= p 0,p,...,p p i- p i Dimesio der Matrix A i Output: m[,] := legth(p) 2 for i:= to do m[i, i] := 0 3 for l:=2 to do /* l = Läge des Teilproblems */ 4 for i := to l + do /* i ist der like Idex */ 5 j := i + l /* j ist der rechte Idex*/ 6 m[i, j] := 7 for k := i to j - do 8 m[i, j] := mi(m[i, j], p i- p k p j + m[i, k] + m[k +, j]) 9 retur m[, ] 3
Berechugsbeispiel A 30 35 A 5 0 4 A 2 35 5 A 5 0 20 A 5 5 3 A 6 20 25 P = (30,35,5,5,0,20,25) 4
6 Berechugsbeispiel P = (30,35,5,5,0,20,25) m 5 6 2 5 j 4 3 i 2 3 9.375 7.875 4.375 2.500 5.750 2.625 750.000 5.000 0 0 3.500 0 0 0 0 4 5
Berechugsbeispiel m [ 2,5] = mi 2 k< 5 m mi m m ( m[ 2, k] + m[ k +,5] + p p p ) [ 2,2] + m[ 3,5] [ 2,3] + m[ 4,5] [ 2,4] + m[ 5,5] + + + p p p p p p 2 3 4 p p p 5 5 5 k 5 0 + 2500 + 35 5 20 = 3000 mi 2625 + 000 + 35 5 20 = 725 4375 + 0 + 35 0 20 = 375 = 725 6
Matrixketteprodukt ud optimale Splitwerte mit dyamischer Programmierug Algorithmus dy-mat-ket(p) Iput: Eigabefolge p= p 0,p,...,p p i- p i Dimesio der Matrix A i Output: m[,] ud eie Matrix s[i,j] vo opt. Splitwerte := legth(p) 2 for i := to do m[i, i] := 0 3 for l := 2 to do 4 for i := to l + do 5 j := i + l 6 m[i, j] := 7 for k := i to j do 8 q := m[i, j] 9 m[i, j] := mi(m[i, j], p i- p k p j + m[i, k] + m[k +, j]) 0 if m[i, j] < q the s[i, j] := k retur (m[, ], s) 7
i 8 5 Berechugsbeispiel für Splitwerte 6 j 3 2 2 5 4 3 3 3 3 5 2 3 4 4 5
Berechug der optimale Klammerug Algorithmus Opt-Klam Iput: Die Sequez A der Matrize, die Matrix s der optimale Splitwerte, zwei Idizes i ud j Output: Eie optimale Klammerug vo A i...j if i < j 2 the X := Opt-Klam(A, s, i, s[i, j]) 3 Y := Opt-Klam(A, s, s[i, j] +, j) 4 retur (X Y) 5 else retur A i Aufruf: Opt Klam(A, s,, ) 9
Bemerkug zum Matrixketteprodukt. Es gibt eie Algorithmus mit Laufzeit O( log ), der optimale Klammerug fidet. 3. Es gibt eie Algorithmus mit liearer Laufzeit O(), der eie Klammerug fidet mit Multiplikatiosaufwad.55 M opt 20