AccueilđŸ‡«đŸ‡·Chercher

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 :

  1. GĂ©nĂ©rer un vecteur alĂ©atoire  de composantes 0 ou 1 de taille .
  2. Calculer .
  3. 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

Références

  1. Virginia Vassilevska Williams, « Breaking the Coppersmith-Winograd barrier »
  2. 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.
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.