AccueilđŸ‡«đŸ‡·Chercher

Algorithme de Strassen

En mathĂ©matiques, plus prĂ©cisĂ©ment en algĂšbre linĂ©aire, l’algorithme de Strassen est un algorithme calculant le produit de deux matrices carrĂ©es de taille n, proposĂ© par Volker Strassen en 1969[1]. La complexitĂ© de l'algorithme est en , avec pour la premiĂšre fois un exposant infĂ©rieur Ă  celui de la multiplication naĂŻve qui est en . Par contre, il a l'inconvĂ©nient de ne pas ĂȘtre stable numĂ©riquement[2].

Algorithme de Strassen oĂč sont reprĂ©sentĂ©s les matrices Ci,j ainsi que les 7 nouvelles matrices Mi

Histoire

L'algorithme de Strassen est le premier algorithme de multiplication de matrices demandant asymptotiquement un nombre d'opĂ©rations arithmĂ©tiques (additions et multiplications) infĂ©rieur Ă  . Ce n'est cependant pas le premier algorithme « plus rapide » que l'algorithme naĂŻf : Shmuel Winograd avait donnĂ© en 1967 un algorithme demandant environ multiplications dans le cas de matrices Ă  coefficients dans un anneau commutatif, contre environ pour l'algorithme naĂŻf ; mais on ignorait s'il Ă©tait possible de multiplier des matrices en complexitĂ© sous-cubique.

De surcroĂźt, l'article de Strassen montre comment utiliser l'algorithme rapide de multiplication pour calculer l'inverse d'une matrice avec la mĂȘme borne de complexitĂ©. Il prouve ainsi que l'algorithme usuel du pivot de Gauss n'est pas optimal.

Le travail de Strassen a ouvert un champ de recherche important en informatique thĂ©orique. La question centrale dans ce domaine est de savoir s'il est possible de multiplier deux matrices en opĂ©rations pour arbitrairement proche de . Parmi les rĂ©sultats importants qui suivront, on peut citer notamment l'algorithme de Coppersmith-Winograd (1987), dont la complexitĂ© est longtemps restĂ©e la meilleure connue.

Description de l'algorithme

Soit R un anneau unitaire et soient A et B des matrices carrĂ©es de taille n dont les coefficients sont Ă©lĂ©ments de l'ensemble sous-jacent Ă  R. Pour des raisons de simplicitĂ©, on traite le cas oĂč n est une puissance de 2. On peut toujours se ramener Ă  ce cas en rajoutant Ă©ventuellement des colonnes et des lignes de zĂ©ros. L'algorithme de Strassen permet de calculer la matrice produit C.

Les trois matrices A, B et C sont divisées en matrices par blocs de taille égale :

oĂč

On a alors

Cette méthode nécessite 8 multiplications de matrices pour calculer les Ci,j, comme dans le produit classique.

La force de l'algorithme de Strassen réside dans un ensemble de sept nouvelles matrices Mi qui vont servir à exprimer les Ci,j avec seulement 7 multiplications au lieu de 8 :

Les Ci,j sont alors exprimées comme

Le procédé est reproduit récursivement jusqu'à ce que les matrices A et B soient « de petite taille ».

Il n'est pas nécessaire d'itérer le procédé jusqu'à une taille 1. En pratique, l'algorithme de Strassen est utilisé pour les matrices de grande taille. Il divise la taille jusqu'aux dizaines ou centaines et un autre algorithme de multiplication prend ensuite le relais pour calculer le produit des « petites matrices » obtenues.

Dans l'algorithme original de Strassen, chaque niveau de rĂ©cursion effectue 18 additions et soustractions de blocs en plus des 7 multiplications. En 1970, Shmuel Winograd propose des formules alternatives qui nĂ©cessitent le mĂȘme nombre de multiplications mais seulement 15 additions. En 2010, Marco Bodrato donne une nouvelle variante avec, pour un produit quelconque, toujours 7 multiplications et 15 additions comme dans l'algorithme de Winograd, mais avec moins d'opĂ©rations dans le cas particulier du calcul du carrĂ© d'une matrice.

Complexité

La multiplication matricielle « naïve » utilise

multiplications des éléments de l'anneau R. Les additions sont généralement ignorées dans le calcul de la complexité car elles sont beaucoup plus rapides que la multiplication, en particulier si la taille des entrées est supérieure à la taille du mot machine.

Avec l'algorithme de Strassen, le nombre de multiplications T(n) est réduit à

Cet exposant est obtenu comme la solution, par le Master theorem, de l'équation par récurrence

La constante dans la complexité est de l'ordre de 50, ce qui fait que l'algorithme de Strassen n'est efficace que pour des matrices de grandes tailles. Pour les matrices avec peu de coefficients non nuls (matrices creuses), l'algorithme de Strassen n'est pas algorithmiquement efficace non plus.

Notes et références

(en) Cet article est partiellement ou en totalitĂ© issu de l’article de WikipĂ©dia en anglais intitulĂ© « Strassen algorithm » (voir la liste des auteurs).

Notes

    Références

    1. (de) Volker Strassen, « Gaussian Elimination is not Optimal », Numerische Mathematik, vol. 13,‎ , p. 354-356.
    2. (en) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction to Algorithms, MIT Press, , 3e Ă©d. [dĂ©tail de l’édition], notes du chap. 4, p. 112.

    Bibliographie

    (en) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction to Algorithms, MIT Press et McGraw-Hill, , 2e Ă©d. [dĂ©tail de l’édition], chap. 31, section 31.2 (« Strassen's algorithm for matrix multiplication »), p. 739-745.

    Liens externes

    Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.