Para enmarcar la pregunta, en informática a menudo queremos calcular el producto de varias probabilidades:
P(A,B,C) = P(A) * P(B) * P(C)
El enfoque más simple es simplemente multiplicar estos números, y eso es lo que iba a hacer. Sin embargo, mi jefe dijo que es mejor agregar el registro de las probabilidades:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Esto da la probabilidad de registro, pero podemos obtener la probabilidad después si es necesario:
P(A,B,C) = e^log(P(A,B,C))
La adición de registros se considera mejor por dos razones:
- Evita el "desbordamiento" por el cual el producto de las probabilidades es tan pequeño que se redondea a cero. Esto a menudo puede ser un riesgo ya que las probabilidades son a menudo muy pequeñas.
- Es más rápido porque muchas arquitecturas de computadora pueden realizar la suma más rápidamente que la multiplicación.
Mi pregunta es sobre el segundo punto. Así es como lo he visto descrito, ¡pero no tiene en cuenta el costo adicional de obtener el registro! Deberíamos comparar "costo de registro + costo de adición" con "costo de multiplicación". ¿Sigue siendo más pequeño después de tener eso en cuenta?
Además, la página de Wikipedia ( probabilidad de registro ) es confusa a este respecto, afirmando que "la conversión al formulario de registro es costosa, pero solo se incurre una vez". No entiendo esto, porque creo que necesitaría tomar el registro de cada término de forma independiente antes de agregar. ¿Qué me estoy perdiendo?
Finalmente, la justificación de que "las computadoras realizan la suma más rápido que la multiplicación" es algo vaga. ¿Es eso específico del conjunto de instrucciones x86, o es un rasgo más fundamental de las arquitecturas de procesador?
Respuestas:
Si solo desea calcular una vez, entonces tiene razón. Tendrás que calcular n logaritmos y n - 1 adiciones, mientras que el método ingenuo requiere n - 1 multiplicaciones.PAGS( A1) ... P( Anorte) norte n - 1 n - 1
Sin embargo, es muy común que desee responder consultas del formulario:
Sin embargo, esta es una declaración razonable en todas las arquitecturas informáticas comunes: la multiplicación en números de punto flotante será más lenta que la suma.
fuente
Por cierto, esta idea es similar a la multiplicación modular de Montgomery, donde las multiplicaciones se realizan en la forma de Montgomery, que es bastante más rápida que la multiplicación habitual y luego la reducción.
fuente