Pour mutliplier nmatrices, on multiplie toujours les ppremi`eres et n−pderni`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 n−1
pour ide 1`a n−j
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 i≤j, 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