Algorithme de Freivalds
L'algorithme de Freivalds (du nom de RĆ«siĆĆĄ MÄrtiĆĆĄ Freivalds) est un test probabiliste pour vĂ©rifier le rĂ©sultat d'un produit matriciel. Ătant donnĂ© trois matrices , , et , de tailles respectives et , Ă coefficients dans un anneau quelconque, le problĂšme est de vĂ©rifier si . Pour le rĂ©soudre, l'algorithme naĂŻf calcule le produit explicitement et compare le rĂ©sultat terme Ă terme avec . Cependant, le meilleur algorithme connu de produit matriciel (dans le cas oĂč les matrices sont de taille identique Ă n) s'exĂ©cute en temps [1]. L'algorithme de Freivalds utilise la randomisation afin de rĂ©duire cette borne Ă [2] avec une forte probabilitĂ©. Il peut vĂ©rifier un produit matriciel en temps avec une probabilitĂ© d'Ă©chec infĂ©rieure Ă .
Algorithme
Procédure
Le principe de l'algorithme consiste à vérifier, pour trois matrices de taille et , notées , et si l'égalité est vérifiée ou non.
On effectue alors les trois Ă©tapes :
- Générer un vecteur aléatoire de composantes 0 ou 1 de taille .
- Calculer .
- Renvoyer Oui si ; Non sinon.
Erreur
Si , alors l'algorithme retourne toujours Oui. Si , alors la probabilité que l'algorithme retourne Oui est inférieure ou égale à 1/2.
En répétant l'algorithme fois et en renvoyant Oui si et seulement si toutes les itérations renvoient Oui, la complexité temporelle du test est et sa probabilité d'erreur est inférieure ou égale à .
Exemple
Supposons qu'on souhaite vérifier si :
Un vecteur alĂ©atoire 2 Ă 1 de composantes Ă©gales Ă 0 ou 1 est sĂ©lectionnĂ© â par exemple, â et utilisĂ© pour calculer :
Le résultat est le vecteur nul ce qui suggÚre la possibilité que AB = C. Toutefois, si le vecteur est sélectionné pour une deuxiÚme itération, le résultat devient :
Le rĂ©sultat n'est plus nul ce qui prouve que AB â C.
Il existe quatre vecteurs 0/1 Ă deux composantes. La moitiĂ© d'entre eux mĂšne au vecteur nul ( et ) de sorte que la probabilitĂ© de choisir alĂ©atoirement un de ces deux vecteurs deux fois de suite (et donc de conclure Ă tort que AB=C) est de 1/22 ou 1/4. Dans le cas gĂ©nĂ©ral, la proportion de vecteurs r menant au vecteur nul peut ĂȘtre infĂ©rieure Ă 1/2. Un grand nombre d'essais est effectuĂ© de maniĂšre Ă rendre la probabilitĂ© d'erreur trĂšs faible.
Probabilité d'erreur
Soit p la probabilitĂ© d'erreur. Si A Ă B = C alors p = 0, et si A Ă B â C alors p †1/2.
Cas A Ă B = C
Ce résultat est indépendant de la valeur de car il utilise seulement l'égalité . Par conséquent, la probabilité d'erreur est dans ce cas :
Cas A Ă B â C
Soit
oĂč
- .
Puisque , certaines composantes de sont forcément non-nulles. Supposons l'élément . Par la définition du produit matriciel, il vient :
- .
pour un certain . Par la formule des probabilités totales, on a :
- .
En utilisant les résultats
dans l'équation précédente, on obtient :
Par conséquent,
Ceci termine la preuve.
Complexité
Une analyse simple de cet algorithme montre une complexité en temps de O(n2) qui bat l'algorithme déterministe classique en O(n3). L'analyse de l'erreur montre qu'aprÚs exécutions de l'algorithme, la probabilité d'erreur est inférieure à . Dans la pratique, l'algorithme est rapide en raison d'implémentations efficaces du calcul d'un produit matrice-vecteur. Par conséquent, l'utilisation des algorithmes randomisés peut accélérer un algorithme déterministe lent. Le meilleur algorithme déterministe pour la vérification du produit matriciel est à l'heure actuelle une variante de l'algorithme de Coppersmith-Winograd avec un temps d'exécution asymptotique en O(n2.3729).
L'algorithme de Freivalds apparaßt souvent dans les introductions aux algorithmes probabilistes grùce à sa simplicité. En pratique, il illustre également la supériorité des algorithmes probabilistes dans certains problÚmes.
Anneaux
Il pourrait ĂȘtre tentant de gĂ©nĂ©rer le vecteur alĂ©atoire avec des composantes prises uniformĂ©ment dans dans le cas oĂč l'anneau de base est .
En effet, on pourrait penser que si le vecteur est pris dans un espace plus grand, l'égalité a encore moins de chance de se produire pour un vecteur générique.
Cependant, on a:
En conclusion, le test devient plus efficace seulement dans le cas oĂč l'erreur n'intervient que sur un coefficient, mais est moins efficace dans le cas gĂ©nĂ©ral oĂč le produit scalaire du vecteur d'erreur et du vecteur alĂ©atoire se compense Ă zĂ©ro.
On détermine la probabilité du test par la formule des probabilités totales:
La probabilité d'erreur de ce second test étant supérieur à , il est préférable de ne générer le vecteur qu'avec des composantes entre 0 et 1.
Voir aussi
Notes
- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « Freivalds' algorithm » (voir la liste des auteurs).
Références
- Virginia Vassilevska Williams, « Breaking the Coppersmith-Winograd barrier »
- Prabhakar Raghavan, « Randomized algorithms », ACM Computing Surveys, vol. 28,â (DOI 10.1145/234313.234327, lire en ligne, consultĂ© le )
- Freivalds, R. (1977), âProbabilistic Machines Can Use Less Running Timeâ, IFIP Congress 1977, pages 839-842.