Вы находитесь на странице: 1из 2

Algorithmique et Programmation Projet : algorithme de Strassen pour la multiplication de matrices

Ecole normale sup erieure D epartement dinformatique td-algo@di.ens.fr 2011-2012

Algorithme de Strassen

Etant donn ees deux matrices M de taille m n et N de taille n p, la m ethode na ve calcule M N en O (m n p) (co ut cubique). Lalgorithme r ecursif de Strassen (voir [1, 31.2]) est plus malin. Supposons dabord m, n, p pairs. Les matrices M et N sont coup ees chacune en quatre blocs de taille (m/2) (n/2) et (n/2) (p/2) : M11 M12 N11 N12 M= N= M21 M22 N21 N22 On calcule ensuite r ecursivement les 7 sous-produits suivants : X1 = (M11 + M22 ) (N11 + N22 ) X 2 = (M21 + M22 ) N11 X3 = M11 (N12 N22 ) X4 = M22 (N21 N11 ) X5 = (M11 + M12 ) N22 X6 = (M21 M11 ) (N11 + N12 ) X7 = (M12 M22 ) (N21 + N22 ) Pour obtenir le produit M N , les sous-produits Xi sont compos es de la mani` ere suivante : P11 = X1 + X4 X5 + X7 P12 = X3 + X5 P21 = X2 + X4 P22 = X1 X2 + X3 + X6 On v erie que lon a bien : P11 P21 P12 P22 P11 P12 P21 P22 = M11 N11 + M12 N21 = M11 N12 + M12 N22 = M21 N11 + M22 N21 = M21 N12 + M22 N22

M N =

car

Dans le cas o` u m, n ou p est impair, on se ram` ene au cas pair en ajoutant une ligne ou une colonne en bas ou ` a droite de M ou N (ou les deux). La r ecursivit e sarr ete d` es quune dimension est 1.

Parenth` esage optimal pour une s equence de multiplications

On se donne maintenant n matrices M1 , . . . , Mn de taille di erentes a1 b1 , . . . , an bn , mais avec la contrainte 1 i < n = bi = ai+1 . Ainsi, le produit M = M1 Mn est bien d eni. Pour se ramener ` a n 1 multiplication de deux matrices, il faut d enir un parenth esage. Lassociativit e de la multiplication garantit que tous les parenth esages donnent le m eme r esultat. 1 Par contre, ils nont pas tous le m eme co ut. Lalgorithme suivant (voir [1, 16.4]) trouve le co ut optimal en O(n3 ) par une m ethode de programmation dynamique :
1. Cest vrai dans R, Z, mais aussi avec le type int qui calcule modulo 232 ou 264 . Par contre cela nest pas vrai pour les nombres ` a virgule ottante.

pour i de 1 ` a n c[i, i] = 0 fin pour pour j de 1 ` a n1 pour i de 1 ` a nj c[i, i + j ] = min { c[i, i + k ] + c[i + k + 1, i + j ] + t(ai , bi+k , bi+j ) | k [0, j 1] } fin pour fin pour retourner c[1, n] o` u la fonction auxiliaire t(m, n, p) (` a d eterminer !) calcule le co ut de la multiplication dune matrice m n par une matrice n p. Au cours de lalgorithme, on maintient dans c[i, j ], pour i j , le co ut optimal de Mi Mj .

Travail demand e

Vous programmerez une fonction qui multiplie deux matrices de dimensions quelconques par la m ethode de Strassen. Les coecients seront de type int. Vous programmerez ensuite une fonction qui prend en argument un nombre arbitraire de matrices de tailles arbitraires, calcule le parenth esage optimal, puis calcule la matrice produit par la m ethode de Strassen. La sortie sur ecran sera la matrice produit ainsi que le parenth esage choisi par lalgorithme dynamique. Vous ecrirez egalement un programme de d emonstration qui calcule le produit de plusieurs matrices al eatoires de dimensions al eatoires. Le programme prendra en argument en ligne de commande le nombre de matrices a ` multiplier ainsi que les dimensions minimales et maximales des matrices. Enn, vous programmerez une fonction qui calcule le produit de mani` ere na ve (produit de deux matrices par lalgorithme cubique, et parenth esage du produit de gauche ` a droite). Vous ecrirez un programme de test automatique qui v erie que limplantation maligne et limplantation na ve donnent le m eme r esultat sur des jeux de matrices al eatoires.

R ef erences
[1] Thomas H. Cormen, Cliord Stein, Ronald L. Rivest, and Charles E. Leiserson. Introduction ` a lalgorithmique. Dunod, 2nd edition, 2001.

Вам также может понравиться