Algorithmique et Programmation
Projet : algorithme de Strassen pour la multiplication de matrices
Ecole normale sup´erieure
D´epartement d’informatique
td-algo@di.ens.fr
2011-2012
1 Algorithme de Strassen
´
Etant donn´ees deux matrices Mde taille m×net Nde taille n×p, la ethode na¨
ıve calcule
M×Nen O(m×n×p) (coˆut cubique). L’algorithme r´ecursif de Strassen (voir [?,§31.2]) est plus
malin. Supposons d’abord m, n, p pairs. Les matrices Met Nsont coup´ees chacune en quatre blocs de
taille (m/2) ×(n/2) et (n/2) ×(p/2) :
M=M11 M12
M21 M22 N=N11 N12
N21 N22
On calcule ensuite r´ecursivement les 7 sous-produits suivants :
X1= (M11 +M22)×(N11 +N22)
X2= (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 Xisont compos´es de la mani`ere suivante :
P11 =X1+X4X5+X7
P12 =X3+X5
P21 =X2+X4
P22 =X1X2+X3+X6
On v´erifie que l’on a bien :
M×N=P11 P12
P21 P22 car
P11 =M11 ×N11 +M12 ×N21
P12 =M11 ×N12 +M12 ×N22
P21 =M21 ×N11 +M22 ×N21
P22 =M21 ×N12 +M22 ×N22
Dans le cas o`u m,nou pest impair, on se ram`ene au cas pair en ajoutant une ligne ou une colonne
en bas ou `a droite de Mou N(ou les deux). La r´ecursivit´e s’arrˆete d`es qu’une dimension est 1.
2 Parenth`esage optimal pour une s´equence de multiplications
On veut maintenant multiplier nmatrices M1,...,Mnde taille diff´erentes a1×b1,...,an×bn, mais
avec la contrainte que leur produit M=M1× · · · × Mnest bien efini (c’est-`a-dire 1 i < n =bi=
ai+1).
Pour se ramener `a n1 multiplication de deux matrices, il faut efinir un parenth´esage. L’associativit´e
de la multiplication garantit que tous les parenth´esages donnent le mˆeme r´esultat. 1Par contre, ils n’ont
pas tous le mˆeme coˆut. L’algorithme suivant (voir [?,§16.4]) trouve le coˆut optimal en O(n3) par une
m´ethode de programmation dynamique.
1. C’est vrai dans R,Z, mais aussi avec le type int qui calcule modulo 232 ou 264 . Par contre cela n’est pas vrai pour
les nombres `a virgule flottante.
1
Pour mutliplier nmatrices, on multiplie toujours les ppremi`eres et npderni`eres matrices (pour un
certain p) et ensuite on multiplie les deux matrices pour un coˆut qui d´epend de la taille de ces matrices.
Trouver la valeur de pest simple si on connaˆıt d´ej`a le coˆut pour multiplier n’importe quel suite de k < n
matrices (on prendre simplement le minimum parmis toutes les valeurs possibles de p).
Voici le pseudo-code exprimant cet algorithme. c[i, j] represente le (meilleur) coˆut pour multiplier
MiMi+1ldotsMj.
pour ide 1`a n
c[i, i] = 0
fin pour
pour jde 1`a n1
pour ide 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]
La fonction auxiliaire t(m, n, p) (`a d´eterminer !) calcule le coˆut de la multiplication d’une matrice
m×npar une matrice n×p. Au cours de l’algorithme, on maintient dans c[i, j], pour ij, le coˆut
optimal de Mi× · · · × Mj.
3 Travail demand´e
Vous programmerez une fonction qui multiplie deux matrices de dimensions quelconques par la m´e-
thode de Strassen. Les coefficients seront de type int.
1. Impl´ementer l’algorithme cubique na¨
ıf qui calcule le produit de deux matrices de taille quelconque
donn´es en entr´ee.
2. Impl´ementer l’algorithme de Strassen qui calcule le produit de deux matrices de taille quelconque
donn´es en entr´ee.
3. Impl´ementer un algorithme qui calcule le nombre de multiplication, d’addition et de soustraction
d’entiers que fait l’algorithme de Strassen sur deux matrices dont la taille est donn´e en entr´ee.
4. Impl´ementer un algorithme qui calcule le produit d’un nombre variable de matrices en entr´ee en
les multipliant de gauche `a droite (et en utilisant l’algorithme de Strassen pour la multiplication
de deux matrices).
5. Impl´ementer un algorithme qui calcule un parenth`esage optimale et le nombre d’op´erations estim´es.
6. Impl´ementer un algorithme qui calcule le produit d’un nombre variable de matrices en entr´ee
utilisant le parenth`esage optimale.
7. Comparer le temps de calcul de l’algorithme cubique et l’algorithme de Strassen pour multipler
deux matrices. Comparer le temps de calcul de l’algorithme cubique gauche `a droite et l’algorithme
de parenth`esage optimale pour multipler plusieurs matrices. Comparer le temps de calcul de l’algo-
rithme de Strassen et le nombre d’op´eration qu’il fait. Aussi verifier bien sˆur que les r´esultats sont
les mˆemes sur les mˆemes entr´ees !
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !