Multiplication rapide de matrices et applications Préparation à l’agrégation - option Calcul formel Antoine Chambert-Loir On discute dans ce texte de quelques algorithmes permettant de multiplier rapidement des matrices et de l’utilité que cela peut avoir.(1) Le premier est algorithme de multiplication rapide est dû à V. S TRASSEN (1969) et son amélioration à S. W INOGRAD (1971). Si la multiplication naïve de matrices carrées de taille n requiert O(n 3 ) opérations (i.e. additions et multiplications), il est possible d’utiliser seulement O(n 2.81 ) opérations par une technique de division pour régner. En poursuivant dans cette direction, il serait possible de considérer des algorithmes plus sophistiqués n’utilisant que O(n 2.38 ) opérations (C OPPERSMITH–W INOGRAD, 1981) mais cela dépasse le niveau de ce texte. Nous étudierons aussi un algorithme rapide d’inversion de matrice, toujours de type diviser pour régner. Parallèlement, nous vérifierons rapidement qu’un produit de matrices est correct : il s’agit du test probabiliste de R. F REIVALDS (1979) qui ne demande que O(n 2 ) opérations. Les applications proposées concernent l’algorithmique des grpahes, notamment la détection de cycles ou l’existence d’un couplage parfait dans un graphe biparti. 1. Multiplication rapide 1.1. Strassen. — Le premier algorithme de multiplication rapide est fondé sur l’observation de S TRASSEN que le produit de matrices 2 × 2 peut être effectuée avec seulement 7 ¶multiplications, En effet, si µ µ ¶ et non 8 avec les formules classiques. a a 12 b b 12 A = 11 , B = 11 , on peut poser a 21 a 22 b 21 b 22 M 1 = (a 11 − a 22 )(b 21 + b 22 ) M 2 = (a 11 + a 22 )(b 11 + b 22 ) M 3 = (a 11 − a 21 )(b 11 + b 12 ) M 4 = (a 11 + a 22 )b 22 M 5 = a 11 (b 12 − b 22 ) M 6 = a 22 (b 21 − b 11 ) M 7 = (a 21 + a 22 )b 21 . Alors, posant (1) c 11 = M 1 + M 2 − M 4 + M 6 c 12 = M 4 + M 5 c 21 = M 6 + M 7 c 22 = M 2 − M 3 + M 5 − M 7 , Plus que largement inspiré d’un projet d’informatique proposé par F. Magniez, cf. http://www. enseignement.polytechnique.fr/informatique/IF/projets/magniez/sujet.html ANTOINE CHAMBERT-LOIR 2 ¶ c 11 c 12 . on a C = AB = c 21 c 22 Lorsque A, B , C sont des matrices de taille 2m, on peut les écrire par blocs et calculer C à l’aide de 7 produits de matrices de taille m. De la sorte, notant M(n) le nombre de multiplications de scalaires requises par la multiplication de matrices de taille n, on a l’inéquation fonctionnelle µ M(n) 6 7M(dn/2e), d’où M(n) 6 O(n σ ), avec σ = log 7/ log 2 ≈ 2.807 6 2.81. En pratique, le O contient une « constante implicite » et il convient de vérifier en pratique à partir de quel entier n, la méthode de S TRASSEN devient plus compétitive que la méthode naïve. 1.2. Winograd. — La méthode de Winograd est fondée sur des formules analogues, mais plus compliquées : avec les mêmes notations pour A, B , C , on peut en effet calculer C via les formules c 11 = M 2 + M 3 c 12 = T1 + M 5 + M 6 c 21 = T2 − M 7 c 22 = T2 + M 5 dans lesquelles on a posé S 1 = a 21 + a 22 S 2 = S 1 − a 11 S 3 = a 11 − a 21 S 4 = a 12 − S 2 S 5 = b 12 − b 11 S 6 = b 22 − S 5 S 7 = b 22 − b 12 S 8 = S 6 − b 21 M1 = S 2 S 6 M 2 = a 11 b 11 M 3 = a 12 b 21 M5 = S 1 S 5 M 6 = S 4 b 22 M 7 = a 22 S 8 T1 = M 1 + M 2 M4 = S 3 S 7 T2 = T1 + M 4 . 1.3. Vérification. — R. F REIVALDS a observé que pour deux matrices A et B distinctes, la proabilité que AX 6= B X lorsque X est un vecteur aléatoire à coordonnées 0 ou 1 (équiprobables) est au moins égale à 1/2. Pour vérifier la justesse d’un produit C = AB , on peut se contenter de vérifier que pour un certain nombre de tels X , on a bien l’égalité C X = A(B X ). Le nombre d’opérations utilisées pour chaque vérification est en O(n 2 ). Si C = AB , alors on a toujours C X = A(B X ). Dans le cas contraire, si C 6= AB et qu’on répète T fois cette vérification avec T vecteurs tirés au sort (indépendants), la probabilité d’avoir C X 6= A(B x) au moins une fois est égale à 1 − 1/2T . La probabilité de se tromper, c’est-à-dire de croire à tort que le calcul est juste, est donc de 1/2T . 2. Calcul d’inverse Dans cette partie il conviendra de se placer sur les réels ou dans un corps fini. MULTIPLICATION RAPIDE DE MATRICES ET APPLICATIONS 3 que A est une matrice inversible. Or, pour une telle matrice A = ¶ µ Supposons A 11 A 12 , alors A −1 se calcule par blocs, à savoir : A 21 A 22 A −1 ¶ A −1 + A −1 A 12 S −1 A 21 A −1 −A −1 A 21 S −1 11 11 11 11 , = −S −1 A 21 A −1 S −1 11 µ où la matrice S est donnée par S = A 22 − A 21 A −1 11 A 12 . Les formules suivantes, à la Strassen, conviennent aussi : on pose P = A −1 11 S = A 21 R B 12 = RU et A −1 Q = A 21 P T = S − A 22U B 21 = UQ R = P A 12 =T −1 B 22 = −U B 11 = P − RB 21 ¶ µ B 11 B 12 . = B 21 B 22 En fait, ces formules ne conviennent que lorsque A 11 et A 22 sont inversibles (c’est la situation générique dans l’ensemble des matrices inversibles). Lorsque la matrice A est à coefficients réels, la formule A −1 = (A T A)−1T A entraîne que, au prix d’une multiplication de matrice supplémentaire, il suffit de savoir inverser les matrices symétriques inversibles définies positives. 3. Théorie des graphes 3.1. Couplages parfaits. — On appelle graphe équibiparti la donnée d’un triplet G = (A, B, E ), où A et B sont des ensembles disjoints (sommets) de même cardinal (fini) et E une partie de A × B : le couple (a, b) est une arête reliant l’élément a de A à l’élément b de B . Un couplage parfait C est un sous-ensemble de E qui apparie chaque sommet de A avec un (et un seul) sommet de B . On présente ici l’approche de M ULMULEY et. al. (1987) pour détecter l’existence de couplages parfaits. Soit n le cardinal de A et notons {a 1 , . . . , a n }, {b 1 , . . . , b n } les éléments de A et de B . Introduisons alors des indéterminées x i , j pour 1 6 i , j 6 n. Considérons la matrice M de taille n × n donnée par M i , j = 1 si (a i , b j ) est une arête de E et M i , j = 0 sinon. Le déterminant det(M ) de M est donc un polynôme de degré n en les x i , j . La formule générale pour le déterminant montre que ce polynôme est formé des monômes de la forme x 1,σ(1) x 2,σ(2) · · · x n,σ(n) où σ est une permutation de {1, . . . , n} telle que chacune des arêtes (a 1 , b σ(1) ), . . . , (a n , b σ(n) ) soit dans E . Une telle permutation fournit immédiatement un couplage parfait ; autrement dit, le graphe équibiparti G admet un couplage parfait si et seulement si le polynôme det(M ) n’est pas identiquement nul. Cette dernière vérification peut être faite de manière probabiliste en spécifiant des valeurs aléatoires aux indéterminées et en testant l’annulation du déterminant obtenu. On a en effet le lemme suivant : 4 ANTOINE CHAMBERT-LOIR Lemme 3.2. — Soit P un polynôme non nul de degré d en m variables à coefficients dans un corps commutatif K . Soit S une partie de K de cardinal s > d ; la probabilité d que P ne s’annule pas en un élément de S m pris au hasard est au moins 1 − . s 3.3. Cycles. — Soit G = (S, E ) un graphe, c’est-à-dire la donnée d’un ensemble S (sommets) et d’une partie E de S × S, l’arête (a, b) reliant le sommet a au sommet b. Supposons S fini, de cardinal n, et notons {a 1 , . . . , a n } ses sommets. La matrice d’adjacence du graphe G est la matrice A dont le coefficient (i , j ) vaut 1 si (a i , a j ) est une arête de G, et 0 sinon. On considérera cette matrice comme à coefficients dans l’algèbre de Boole B défini comme suit : B = {0, 1}, muni des deux lois binaires ∨ (ou logique) et ∧ (et logique). La multiplication booléenne des matrices à coefficients dans B est définie comme la multiplication usuelle, l’addition et la multiplication étant remplacées par ∨ et ∧ respectivement. Alors, le coefficient (i , j ) de la matrice A k vaut 1 si et seulement s’il existe un chemin de longueur k reliant a i à a j , c’est-à-dire une suite d’entiers i = i 0 , i 1 , . . . , i k = j tels que (a i s−1 , a i s ) soit une arête de G pour s ∈ {1, . . . , k}. (Si l’on considérait la matrice A comme à coefficients dans Z, le coefficient (i , j ) de la matrice A k serait égal au nombre de tels chemins reliant a i à a j .) Grâce à l’algorithme d’exponentiation binaire (élévations successives au carré), le calcul de A k peut être fait par O(log k) multiplications de matrices. Chacune de ces multiplications sera effectuée avec l’algorithme de S TRASSEN convenablement adapté. (On peut aussi considérer que les coefficients de A sont entiers.) 4. Suggestions – On pourra programmer les algorithmes proposés, en évaluer le temps de calcul en fonction de la taille des matrices en jeu (prendre des matrices aléatoires) et le comparer à la complexité théorique (nombre d’additions et surtout de multiplications dans le corps de base). Pour l’implémentation éventuelle, vous pourrez supposer que les matrices sont de taille une puissance de 2, c’est-à-dire n = 2k ; vous pourrez éventuellement expliquer comment traiter le cas général, voire le faire. – Le test de Freivalds permettra de vérifier la véracité (probable) des calculs donc la correction des programmes. Quelques raffinements de ce test sont possibles : (1) Plutôt que de choisir des vecteurs aléatoires dans {0, 1}n (ou dans un ensemble S n , S étant une partie de K ), vous pourrez étudier la possibilité de choisir des vecteurs de la forme (1, x, . . . , x n−1 ), où x est aléatoire ; (2) Vous pourriez choisir un nombre premier p assez grand, mais pas trop, et tester la relation C X = A(B X ) modulo p. – On pourra aussi adapter l’algorithme d’inversion pour détecter si une matrice réelle est inversible. Que se passe-t-il sur un corps fini ? Adapter aussi cet algorithme pour calculer le déterminant d’une matrice. MULTIPLICATION RAPIDE DE MATRICES ET APPLICATIONS 5 – Démontrer le lemme du paragraphe 3.1. Essayer aussi de choisir des vecteurs aléatoires d’une forme particulière, comme dans le test de Freivalds. Pour l’application aux couplages parfaits, pouvez-vous faire les calculs modulo un petit nombre premier ?