Articulo de referencia

Algoritmo de Freivalds

El algoritmo de Freivalds (llamado así en honor a Rūsiņš Mārtiņš Freivalds ) es un algoritmo probabilístico aleatorio utilizado para verificar la multiplicación de matrices . Da...

El algoritmo de Freivalds (llamado así en honor a Rūsiņš Mārtiņš Freivalds ) es un algoritmo probabilístico aleatorio utilizado para verificar la multiplicación de matrices . Dadas tres matrices n × n  A{\displaystyle A},B{\displaystyle B}, ydo{\displaystyle C}, un problema general es verificar siA×B=do{\displaystyle A\times B=C}Un algoritmo ingenuo calcularía el producto .A×B{\displaystyle A\times B}explícitamente y comparar término por término si este producto es igual ado{\displaystyle C}Sin embargo, el algoritmo de multiplicación de matrices más conocido se ejecuta enO(norte2.372){\displaystyle O(n^{2.372})}tiempo. El algoritmo de Freivalds utiliza la aleatorización para reducir este límite de tiempo aO(norte2){\displaystyle O(n^{2})}[ 1 ] con alta probabilidad. EnO(knorte2){\displaystyle O(kn^{2})}tiempo el algoritmo puede verificar un producto matricial con una probabilidad de fallo menor que2k{\displaystyle 2^{-k}}.

El algoritmo

Aporte

Tres matrices n × n  A{\displaystyle A},B{\displaystyle B}, ydo{\displaystyle C}.

Producción

Sí, siA×B=do{\displaystyle A\times B=C}; No, de lo contrario.

Procedimiento

  1. Generar un vector aleatorio 0/1 de n × 1  r{\displaystyle {\vec {r}}}.
  2. CalcularPAG=A×(Br)dor{\displaystyle {\vec {P}}=A\times (B{\vec {r}})-C{\vec {r}}}.
  3. Mostrar "Sí" siPAG=(0,0,,0)T{\displaystyle {\vec {P}}=(0,0,\ldots ,0)^{T}}; "No", de lo contrario.

Error

SiA×B=do{\displaystyle A\times B=C}, entonces el algoritmo siempre devuelve "Sí". SiA×Bdo{\displaystyle A\times B\neq C}, entonces la probabilidad de que el algoritmo devuelva "Sí" es menor o igual a la mitad. Esto se denomina error unilateral .

Al iterar el algoritmo k veces y devolver "Sí" solo si todas las iteraciones dan como resultado "Sí", se obtiene un tiempo de ejecución deO(knorte2){\displaystyle O(kn^{2})}y probabilidad de error de1/2k{\displaystyle \leq 1/2^{k}}se logra.

Ejemplo

Supongamos que uno quisiera determinar si:

AB=[2334][1012]=¿[6587]=do.{\displaystyle AB={\begin{bmatrix}2&3\\3&4\end{bmatrix}}{\begin{bmatrix}1&0\\1&2\end{bmatrix}}{\stackrel {?}{=}}{\begin{bmatrix}6&5\\8&7\end{bmatrix}}=C.}

Se selecciona un vector aleatorio de dos elementos con entradas iguales a 0 o 1, por ejemplo : r=[11]{\displaystyle {\vec {r}}={\begin{bmatrix}1\\1\end{bmatrix}}}  y se utiliza para calcular:

A×(Br)dor=[2334]([1012][11])[6587][11]=[2334][13][1115]=[1115][1115]=[00].{\displaystyle {\begin{aligned}A\times (B{\vec {r}})-C{\vec {r}}&={\begin{bmatrix}2&3\\3&4\end{bmatrix}}\left({\begin{bmatrix}1&0\\1&2\end{bmatrix}}{\begin{bmatrix}1\\1\end{bmatrix}}\right)-{\begin{bmatrix}6&5\\8&7\end{bmatrix}}{\begin{bmatrix}1\\1\end{bmatrix}}\\&={\begin{bmatrix}2 &3\\3&4\end{bmatrix}}{\begin{bmatrix}1\\3\end{bmatrix}}-{\begin{bmatrix}11\\15\end{bmatrix}}\\&={\begin{bmatrix}11\\15\end{bmatrix}}-{\begin{bmatrix}11\\15\end{bmatrix}}\\&={\begin{bmatrix}0\\0\end{bmatrix}}.\end{aligned}}}

Esto produce el vector cero, lo que sugiere la posibilidad de que AB = C. Sin embargo, si en un segundo intento el vectorr=[10]{\displaystyle {\vec {r}}={\begin{bmatrix}1\\0\end{bmatrix}}}Si se selecciona, el resultado es:

A×(Br)dor=[2334]([1012][10])[6587][10]=[11].{\displaystyle A\times (B{\vec {r}})-C{\vec {r}}={\begin{bmatrix}2&3\\3&4\end{bmatrix}}\left({\begin{bmatrix}1&0\\1&2\end{bmatrix}}{\begin{bmatrix}1\\0\end{bmatrix}}\right)-{\begin{bmatrix}6&5\\8&7\end{bmatrix}}{\begin{bmatrix}1\\0\end{bmatrix}}={\begin{bmatrix}-1\\-1\end{bmatrix}}.}

El resultado es distinto de cero, lo que demuestra que, de hecho, AB C.

Hay cuatro vectores de dos elementos 0/1, y la mitad de ellos dan el vector cero en este caso (r=[00]{\displaystyle {\vec {r}}={\begin{bmatrix}0\\0\end{bmatrix}}}yr=[11]{\displaystyle {\vec {r}}={\begin{bmatrix}1\\1\end{bmatrix}}}), por lo que la probabilidad de seleccionar aleatoriamente estos en dos ensayos (y concluir erróneamente que AB=C) es 1/2 2 o 1/4. En el caso general, la proporción de r que produce el vector cero puede ser menor que 1/2, y se utilizaría un mayor número de ensayos (como 20), lo que hace que la probabilidad de error sea muy pequeña.

Análisis de errores

Sea p la probabilidad de error. Afirmamos que si A × B = C , entonces p = 0, y si A × BC , entonces p ≤ 1/2.    

Caso A × B = C  

PAG=A×(Br)dor=(A×B)rdor=(A×Bdo)r=0{\displaystyle {\begin{aligned}{\vec {P}}&=A\times (B{\vec {r}})-C{\vec {r}}\\&=(A\times B){\vec {r}}-C{\vec {r}}\\&=(A\times BC){\vec {r}}\\&={\vec {0}}\end{aligned}}}

Esto es independientemente del valor der{\displaystyle {\vec {r}}}, ya que solo utiliza esoA×Bdo=0{\displaystyle A\times BC=0}Por lo tanto, la probabilidad de error en este caso es:

Pr[PAG0]=0{\displaystyle \Pr[{\vec {P}}\neq 0]=0}

Caso A × BC  

DejarD{\displaystyle D}de tal manera que

PAG=D×r=(pag1,pag2,,pagnorte)T{\displaystyle {\vec {P}}=D\times {\vec {r}}=(p_{1},p_{2},\dots ,p_{n})^{T}}

Dónde

D=A×Bdo=(dij){\displaystyle D=A\times BC=(d_{ij})}.

DesdeA×Bdo{\displaystyle A\times B\neq C}, tenemos que algún elemento deD{\displaystyle D}es distinto de cero. Supongamos que el elementodij0{\displaystyle d_{ij}\neq 0}Por definición de multiplicación de matrices , tenemos:

pagi=k=1nortedikrk=di1r1++dijrj++dinorternorte=dijrj+y{\displaystyle p_{i}=\sum _{k=1}^{n}d_{ik}r_{k}=d_{i1}r_{1}+\cdots +d_{ij}r_{j}+\cdots +d_{in}r_{n}=d_{ij}r_{j}+y}.

Por alguna constantey{\displaystyle y}. Usando el teorema de Bayes , podemos particionar sobrey{\displaystyle y}:

Utilizamos eso:

Pr[pagi=0|y=0]=Pr[rj=0]=12{\displaystyle \Pr[p_{i}=0|y=0]=\Pr[r_{j}=0]={\frac {1}{2}}}
Pr[pagi=0|y0]=Pr[rj=1dij=y]Pr[rj=1]=12{\displaystyle \Pr[p_{i}=0|y\neq 0]=\Pr[r_{j}=1\land d_{ij}=-y]\leq \Pr[r_{j}=1]={\frac {1}{2}}}

Sustituyendo estos valores en la ecuación ( 1 ), obtenemos:

Pr[pagi=0]12Pr[y=0]+12Pr[y0]=12Pr[y=0]+12(1Pr[y=0])=12{\displaystyle {\begin{aligned}\Pr[p_{i}=0]&\leq {\frac {1}{2}}\cdot \Pr[y=0]+{\frac {1}{2}}\cdot \Pr[y\neq 0]\\&={\frac {1}{2}}\cdot \Pr[y=0]+{\frac {1}{2}}\cdot (1-\Pr[y=0])\\&={\frac {1}{2}}\end{aligned}}}

Por lo tanto,

Pr[PAG=0]=Pr[pag1=0pagi=0pagnorte=0]Pr[pagi=0]12.{\displaystyle \Pr[{\vec {P}}=0]=\Pr[p_{1}=0\land \dots \land p_{i}=0\land \dots \land p_{n}=0]\leq \Pr[p_{i}=0]\leq {\frac {1}{2}}.}

Con esto concluye la demostración.

Ramificaciones

Un análisis algorítmico simple muestra que el tiempo de ejecución de este algoritmo esO(norte2){\displaystyle O(n^{2})}(en notación Big O ). Esto supera el tiempo de ejecución del algoritmo determinista clásico deO(norte3){\displaystyle O(n^{3})}(oO(norte2.372){\displaystyle O(n^{2.372})}si se utiliza la multiplicación rápida de matrices ). El análisis de errores también muestra que si se ejecuta el algoritmok{\displaystyle k}veces, un margen de error de menos de1/2k{\displaystyle 1/2^{k}}Se puede lograr una cantidad exponencialmente pequeña. El algoritmo también es rápido en la práctica debido a la amplia disponibilidad de implementaciones rápidas para productos matriz-vector. Por lo tanto, la utilización de algoritmos aleatorios puede acelerar un algoritmo determinista muy lento .

El algoritmo de Freivalds aparece con frecuencia en las introducciones a los algoritmos probabilísticos debido a su simplicidad y a cómo ilustra la superioridad de los algoritmos probabilísticos en la práctica para algunos problemas.

Véase también

Referencias

  1. Raghavan, Prabhakar (1997). "Algoritmos aleatorios" . ACM Computing Surveys . 28 : 33–37 . doi : 10.1145/234313.234327 . S2CID 207196543 . 
  • Freivalds, R. (1977). «Las máquinas probabilísticas pueden usar menos tiempo de ejecución». Procesamiento de la información 77  : actas del Congreso IFIP 77, Toronto, 8-12 de agosto de 1977. North-Holland. págs. 839-842 . ISBN  0-7204-0755-9OCLC 878720415 
  • Mitzenmacher, Michael ; Upfal, Eli (2005). "1.3 Aplicación: Verificación de la multiplicación de matrices" . Probabilidad y computación: Algoritmos aleatorios y análisis probabilístico . Cambridge University Press. pp. 8–12 . ISBN  0-521-83540-2.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Freivalds%27_algorithm&oldid=1323607201 "