
En algoritmos , la precomputación consiste en realizar un cálculo inicial antes de la ejecución para generar una tabla de consulta que el algoritmo pueda utilizar, evitando así cálculos repetidos en cada ejecución. La precomputación se utiliza a menudo en algoritmos que dependen de los resultados de cálculos costosos que no dependen de la entrada del algoritmo. Un ejemplo sencillo de precomputación es el uso de constantes matemáticas codificadas , como π y e , en lugar de calcular sus aproximaciones con la precisión necesaria durante la ejecución.
En bases de datos , el término materialización se utiliza para referirse al almacenamiento de los resultados de un preprocesamiento, [ 1 ] [ 2 ] como en una vista materializada . [ 3 ] [ 4 ]
Descripción general
Precalcular un conjunto de resultados intermedios al inicio de la ejecución de un algoritmo suele aumentar considerablemente su eficiencia . Esto resulta ventajoso cuando una o más entradas se encuentran dentro de un rango suficientemente pequeño como para que los resultados puedan almacenarse en un bloque de memoria de tamaño razonable. Dado que el acceso a la memoria tiene una complejidad temporal prácticamente constante (salvo por los retrasos de la caché ), cualquier algoritmo con un componente cuya eficiencia sea inferior a la constante en un rango de entrada reducido puede mejorarse precalculando valores. En algunos casos, se pueden obtener algoritmos de aproximación eficientes calculando un subconjunto discreto de valores e interpolando para obtener valores de entrada intermedios, ya que la interpolación también es una operación lineal.
Historia
Antes de la llegada de las computadoras, las personas usaban tablas de consulta impresas para agilizar los cálculos manuales de funciones complejas, como las tablas trigonométricas , las tablas de logaritmos y las tablas de funciones de densidad estadística . [ 5 ] A los escolares a menudo se les enseña a memorizar las tablas de multiplicar para evitar los cálculos de los números más comunes (hasta 9 x 9 o 12 x 12). Ya en el año 493 d. C., Victorio de Aquitania escribió una tabla de multiplicar de 98 columnas que mostraba (en números romanos ) el producto de cada número desde 2 hasta 50 veces, y las filas eran "una lista de números que comenzaba con mil, descendiendo por centenas hasta cien, luego descendiendo por decenas hasta diez, luego por unidades hasta uno, y luego las fracciones hasta 1/144". [ 6 ]
Ejemplos
Incluso las implementaciones informáticas modernas de funciones trigonométricas digitales suelen utilizar tablas de consulta precalculadas para proporcionar coeficientes para algoritmos de interpolación o para inicializar algoritmos de aproximación sucesivos .
Muchos ataques a los sistemas criptográficos implican preprocesamiento.
Algunos ejemplos de precomputación a gran escala como parte de algoritmos modernos y eficientes son:
- Mesas arcoíris
- hashes perfectos
- El ataque del cubo
- Árboles BSP precalculados para cálculos de visibilidad en gráficos 3D
- Precálculo de radiosidad para iluminación en gráficos 3D
Los compiladores utilizan ampliamente la precomputación para aumentar la velocidad de ejecución del código resultante: esta precomputación puede considerarse, en efecto, una forma de evaluación parcial del propio código del programa. Ejemplos de este tipo de precomputación incluyen el análisis del flujo de datos y los pasos de reducción de complejidad .
Véase también
Referencias
- ↑ Jiawei Han; Micheline Kamber (9 de junio de 2011). Minería de datos: conceptos y técnicas . Elsevier. pág. 159. ISBN 978-0-12-381480-7.
- ↑ Sven Groppe (29 de abril de 2011). Gestión de datos y procesamiento de consultas en bases de datos de la web semántica . Springer Science & Business Media. pág. 178. ISBN 978-3-642-19357-6.
- ^ Karen Morton; Kerry Osborne; Robyn Arenas; Riyaj Shamsudeen; Jared Still (28 de octubre de 2013). Pro Oracle SQL . Presione. pag. 48.ISBN 978-1-4302-6220-6.
- ↑ Marie-Aude Aufaure; Esteban Zimányi (16 de enero de 2012). Business Intelligence: First European Summer School, EBISS 2011, París, Francia, 3-8 de julio de 2011, Tutorial Lectures . Springer Science & Business Media. p. 43. ISBN 978-3-642-27357-5.
- ↑ Campbell-Kelly, Martin ; Croarken, Mary ; Flood, Raymond ; et al., eds. (2003). The History of Mathematical Tables From Sumer to Spreadsheets . Oxford University Press. ISBN 978-0-19-850841-0.
- ↑ Maher, David WJ y John F. Makowski. «Evidencia literaria de la aritmética romana con fracciones», «Filología clásica» (2001), vol. 96, n.º 4, págs. 376-399. (Véase la página 383).
- Optimización de software