Algoritam za množenje ulančanih matrica Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek
O problemu (1) Neka je A 1, A 2,, A n niz ulančanih matrica duljine n N, gdje su dimenzije matrice A i redom m i 1 x m i, 0 i n. Prisjetimo se da je množenje matrica asocijativno: A(BC) = (AB)C Postavlja se pitanje koji je redoslijed za množenje matrica optimalan. Uvjerimo se da je redoslijed bitan!
O problemu (2) 100 x 30 30 x 20 20 x 3 3 x 10 ((AB)C)D = 100 30 20 + 100 20 3 + 100x3x10 = 69.000 (A(BC))D = 30 20 3 + 100x30x3 + 100 3 10 = 13.800 (AB)(CD) = 100x30x20 + 20x3x10 + 100x20x10 = 80.600 A((BC)D) = 30 20 3 + 30x3x10 + 100x30x10 = 32.700 A(B(CD)) = 20x3x10 + 30x20x10 + 100x30x10 = 36.600 *Matrice u primjeru osobno sam odabrao.
O rješenju (3) Problem možemo ilustrirati binarnim stablom: D C A B C D A B ((AB)C)D (AB)(CD)
Pristup problemu dinamičkim programiranjem (1) n duljina našeg lanca Za 1 i j n, L(i, j) = lanac A i,, A j Za lanac L(i, j) definiramo: C(i, j): =optimalni broj operacija za zadani lanac K(i, j) k td i k < j i C(i, k) + C(k + 1, j) = C(i, j) (predstavlja indeks na kojem je najbolje presjeći lanac) T 1 = C i, j : 1 i j n T 2 = {K i, j : 1 i j n}
Pristup problemu dinamičkim programiranjem (2) T1 T2 i\j 1 2 3 4 1 0 2 0 3 0 4 0 i\j 1 2 3 4 1 2 3 4 Lanac duljine 1. A, B, C, D. Množenja nema stoga je cijena 0. Sjecanja lanca nema pa ništa ne upisujemo u drugu tablicu.
Pristup problemu dinamičkim programiranjem (3) T1 T2 i\j 1 2 3 4 1 0 60.000 2 0 1.800 3 0 600 4 0 i\j 1 2 3 4 1 1 2 2 3 3 4 Lanac duljine 2. AB, BC, CD. Obično množenje matrica. Lanac je moguće presjeći samo na prvoj matrici.
Pristup problemu dinamičkim programiranjem (4) T1 T2 i\j 1 2 3 4 1 0 60.000 10.800 2 0 1.800 2.700 3 0 600 4 0 i\j 1 2 3 4 1 1 1 2 2 3 3 3 4 Lanac duljine 3. 1. ABC 1. A BC = 1.800 + 9.000 = 10.800 <- Sječemo na 1. matrici 2. AB C = 60.000 + 6.000 = 66.000 2. BCD 1. B CD = 600 + 6.000 = 6.600 2. BC D = 1.800 + 900 = 2.700 <- Sječemo na 3. matrici
Pristup problemu dinamičkim programiranjem (5) T1 T2 i\j 1 2 3 4 1 0 60.000 10.800 13.800 2 0 1.800 2.700 3 0 600 4 0 i\j 1 2 3 4 1 1 1 3 2 2 3 3 3 4 Lanac duljine 4. 1. ABCD 1. A BCD = 2.700 + 30.000 = 32.700 2. AB CD = 60.000 + 600 + 20.000 = 80.600 3. ABC D = 10.800 + 3.000 = 13.800 <- Sječemo na 3. mjestu
Pseudokod for i = 1 to n: C(i, i) = 0 for s = 1 to n 1: for i = 1 to n s j = i + s C(i, j) = min {C(i, k) + C(k + 1, j) + m i 1 m k m j : i k < j} return C(1, n)
Složenost Za računanje tablica potrebne su 2 for-petlje za prolazak čitavog gornjeg trokuta i 1 for-petlja za traženje minimuma. Složenost: O(n 3 ). Ipak, konačan broj operacija je nešto bolji i može se dobiti sumiranjem: n i=1 n s j+s s=1 k=i 1 = n3 3
Rezultati testiranja (1) Vršena su 3 testiranja: 1. Usporedba klasičnog i dinamičkog algoritma Veliki lanci, manje matrice (lanci duljina 50 1000, matrice dimenzija između 10 i 100). 2. Veliki lanci, manje matrice (lanci duljina 50 1000, matrice dimenzija između 10 i 100). 3. Trajanje samog algoritma računanja optimalnog redoslijeda (lanci duljina 100 2500).
Rezultati testiranja (2) Tesitranje je vršeno na kompjutoru s procesorom Intel Core i5-3570k CPU @ 3.40GHz. Algoritam je implementiran u programskom jeziku Java. Izvorni kod i rezultati zapisani su na eng. jeziku. Za svaki lanac uzeta je populacija od 20 matrica čije su dimenzije odabrane nasumično. Korišten je algoritam za nasumično biranje brojeva koji dolazi zajedno s Java SDK. Detalji.
Rezultati testiranja (3) Test 1, usporedba klasičnog i dinamičkog algoritma. Mjerna jedinica: sekunde Matrice duljina: od 10 do 1000, duljine lanaca: od 450 do 1000. Chain Length Classic Dynamic Difference 450 0,02 0,07-0,05 450 0,09 0,08 0,01 450 0,02 0,05-0,03 450 0,06 0,05 0,01 450 0,09 0,06 0,03 450 0,09 0,05 0,04 450 0,05 0,05 0,00 450 0,04 0,05-0,01 450 0,10 0,05 0,05 450 0,02 0,05-0,03 450 0,02 0,05-0,03 450 0,09 0,05 0,04 450 0,12 0,05 0,07 450 0,06 0,05 0,01 450 0,06 0,05 0,01 450 0,02 0,05-0,03 450 0,05 0,05 0,00 450 0,02 0,17-0,15 450 0,02 0,05-0,03 450 0,03 0,04-0,01 AVG 0,05 0,06-0,01 Chain Length Classic Dynamic Difference 1000 0,10 1,60-1,50 1000 0,16 1,78-1,62 1000 0,14 1,79-1,65 1000 0,25 1,73-1,48 1000 0,15 1,60-1,45 1000 0,21 1,77-1,56 1000 0,17 1,82-1,65 1000 0,18 1,83-1,65 1000 0,21 1,93-1,72 1000 0,08 1,93-1,85 1000 0,24 1,41-1,17 1000 0,18 1,48-1,30 1000 0,13 1,51-1,38 1000 0,23 1,38-1,15 1000 0,23 1,27-1,04 1000 0,20 1,28-1,08 1000 0,08 2,01-1,93 1000 0,04 2,01-1,97 1000 0,17 1,93-1,76 1000 0,25 1,90-1,65 AVG 0,17 1,70-1,53 Primjećujemo da za zadane parametre našeg problema, naš algoritam prestaje biti efikasan za lanac duljine 450.
Time/s Rezultati testiranja (4) Test 2, usporedba klasičnog i dinamičkog algoritma. Mjerna jedinica: sekunde Matrice duljina: od 100 do 1000, duljine lanaca: od 3 do 30. Comparison of Algorithms 40 35 30 25 20 15 10 5 0 0 5 10 15 20 25 30 35 Chain Length Classic Dynamic Chain Length Classic Dynamic Difference 3 3,24 2,35 0,88 6 6,99 1,96 5,03 9 8,30 2,96 5,34 12 18,15 3,97 14,18 15 23,04 3,17 19,86 18 24,69 4,65 20,04 21 35,53 5,65 29,88 24 27,91 5,54 22,37 27 29,30 5,40 23,90 30 31,49 6,58 24,91 Navedene vrijednosti u 2. i 3. koloni su aritmetičke sredine rezultata. Primjećujemo da dinamičkim računanjem drastično povećavamo efikasnost.
Chain Length Rezultati testiranja (5) Test 3, trajanje algoritma nalaženja najboljeg redoslijeda množenja. Duljine lanca: 50 2500. 45 40 Algoritam pronalaska optimalnog redoslijeda množenja 35 30 y = 3E-09x 3-3E-07x 2-0,001x + 0,2524 25 20 15 10 5 0-5 0 500 1000 1500 2000 2500 3000 Time/s
Zaključak (1) Kada se isplati računati redoslijed množenja? U većini slučajeva netrivijalnih lanaca DA. Za slučajeve velikih matrica, promjena može biti drastična. S druge strane, cijena samog algoritma dosta je niska, tako da ga se isplati koristiti čak i kod lanaca razumnih duljina, manjih matrica.
Zaključak (2) Kada se ne isplati računati redoslijed množenja? Ukoliko nam problem nalaže da ćemo često množiti lanac matrica čija duljina prelazi veličinu trostruko većoj od dimenzija matrica. Ukoliko nam je problem toliko jednostavan, da pisanje samog koda oduzima više resursa.
Literatura Algorithms by S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani http://en.wikipedia.org/