El algoritmo de Freivalds (llamado así por Rūsiņš Mārtiņš Freivalds ) es un algoritmo probabilístico aleatorio utilizado para verificar la multiplicación de matrices . Dadas tres matrices n × n , , y , un problema general es verificar si . Un algoritmo ingenuo calcularía el producto explícitamente y compararía término por término para ver si este producto es igual a . Sin embargo, el algoritmo de multiplicación de matrices más conocido se ejecuta en el tiempo. [1] El algoritmo de Freivalds utiliza la aleatorización para reducir este límite de tiempo a [2] con alta probabilidad . Con el tiempo, el algoritmo puede verificar un producto matricial con una probabilidad de falla menor que .
El algoritmo
Aporte
Tres matrices n × n , , y .
Producción
Sí, si ; No, en caso contrario.
Procedimiento
- Generar un vector aleatorio n × 1 0/1 .
- Calcular .
- Salida "Sí" si ; "No" en caso contrario.
Error
Si , entonces el algoritmo siempre devuelve "Sí". Si , entonces la probabilidad de que el algoritmo devuelva "Sí" es menor o igual a la mitad. Esto se llama error unilateral .
Al iterar el algoritmo k veces y devolver "Sí" solo si todas las iteraciones dan como resultado "Sí", se logra un tiempo de ejecución de y una probabilidad de error de .
Ejemplo
Supongamos que uno quisiera determinar si:
Se selecciona un vector aleatorio de dos elementos con entradas iguales a 0 o 1, por ejemplo , y se utiliza para calcular:
Esto produce el vector cero, lo que sugiere la posibilidad de que AB = C. Sin embargo, si en un segundo ensayo se selecciona el vector, el resultado se convierte en:
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 ( y ), por lo que la probabilidad de seleccionarlos aleatoriamente en dos ensayos (y concluir falsamente que AB=C) es 1/2 2 o 1/4. En el caso general, la proporción de r que da como resultado el vector cero puede ser menor que 1/2, y se utilizaría un número mayor de ensayos (como 20), lo que hace que la probabilidad de error sea muy pequeña.
Análisis de errores
Sea p igual a la probabilidad de error. Afirmamos que si A × B = C , entonces p = 0, y si A × B ≠ C , entonces p ≤ 1/2.
CasoA × B=do
Esto es independiente del valor de , ya que solo utiliza ese . Por lo tanto, la probabilidad de error en este caso es:
CasoA × B≠do
Sea tal que
Dónde
- .
Como , tenemos que algún elemento de es distinto de cero. Supongamos que el elemento . Por la definición de multiplicación de matrices , tenemos:
- .
Para alguna constante . Utilizando el teorema de Bayes , podemos dividir en :
Nosotros lo usamos:
Introduciendo estos en la ecuación ( 1 ), obtenemos:
Por lo tanto,
Con esto finaliza la prueba.
Ramificaciones
Un análisis algorítmico simple muestra que el tiempo de ejecución de este algoritmo es (en notación O mayúscula ). Esto supera el tiempo de ejecución del algoritmo determinista clásico de (o si se utiliza una multiplicación rápida de matrices ). El análisis de errores también muestra que si el algoritmo es tiempos de ejecución, se puede lograr un límite de error menor que , 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 surge con frecuencia en las introducciones a los algoritmos probabilísticos debido a su simplicidad y porque ilustra la superioridad de los algoritmos probabilísticos en la práctica para algunos problemas.
Véase también
Referencias
- ^ Virginia Vassilevska Williams . "Rompiendo la barrera entre Coppersmith y Winograd". CiteSeerX 10.1.1.228.9947 .
- ^ Raghavan, Prabhakar (1997). "Algoritmos aleatorios". ACM Computing Surveys . 28 : 33–37. doi : 10.1145/234313.234327 . S2CID 207196543 . Consultado el 16 de diciembre de 2008 .
- Freivalds, R. (1977), “Las máquinas probabilísticas pueden utilizar menos tiempo de ejecución”, Congreso IFIP 1977, págs. 839–842.
- Mitzenmacher, Michael ; Upfal, Eli (2005), Probabilidad y computación: algoritmos aleatorios y análisis probabilístico, Cambridge University Press, págs. 8-12, ISBN 0521835402