Multiplication rapide de matrices et applications

publicité
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 ?
Téléchargement