stringtranslate.com

Evaluación de polinomios

En matemáticas y ciencias de la computación , la evaluación de polinomios se refiere al cálculo del valor de un polinomio cuando sus indeterminados se sustituyen por algunos valores. En otras palabras, evaluar el polinomio en consiste en calcular Véase también Anillo polinomial § Evaluación polinomial

Para evaluar el polinomio univariado, el método más ingenuo utilizaría multiplicaciones para calcular , utilizaría multiplicaciones para calcular y así sucesivamente para un total de multiplicaciones y sumas. Si se utilizan métodos mejores, como la regla de Horner , esto se puede reducir a multiplicaciones y sumas. Si se permite algún preprocesamiento, es posible ahorrar aún más.

Fondo

Este problema surge con frecuencia en la práctica. En geometría computacional , se utilizan polinomios para calcular aproximaciones de funciones mediante polinomios de Taylor . En criptografía y tablas hash , se utilizan polinomios para calcular hashes k -independientes .

En el primer caso, los polinomios se evalúan utilizando aritmética de punto flotante , que no es exacta. Por lo tanto, los diferentes esquemas de evaluación darán, en general, respuestas ligeramente diferentes. En el segundo caso, los polinomios se evalúan normalmente en un cuerpo finito , en cuyo caso las respuestas son siempre exactas.

Métodos generales

Regla de Horner

El método de Horner evalúa un polinomio usando corchetes repetidos: Este método reduce el número de multiplicaciones y sumas a solo

El método de Horner es tan común que se ha añadido a muchos procesadores de ordenador una instrucción informática " operación de multiplicación-acumulación ", que permite realizar las operaciones de suma y multiplicación en un paso combinado.

Multivariante

Si el polinomio es multivariado, la regla de Horner se puede aplicar recursivamente sobre algún orden de las variables. Por ejemplo:

se puede escribir como

Carnicer y Gasca describieron una versión eficiente de este enfoque. [1]

El plan de Estrin

Si bien no es posible realizar menos cálculos que con la regla de Horner (sin preprocesamiento), en las computadoras modernas el orden de evaluación puede ser muy importante para la eficiencia computacional. Un método conocido como esquema de Estrin calcula un polinomio (de una sola variable) en un patrón tipo árbol:

Combinado con la exponenciación por cuadrado , esto permite paralelizar el cálculo.

Evaluación con preprocesamiento

Los polinomios arbitrarios se pueden evaluar con menos operaciones de las que requiere la regla de Horner si primero "preprocesamos" los coeficientes .

Un ejemplo lo dio por primera vez Motzkin [2], quien señaló que

se puede escribir como

donde los valores se calculan de forma avanzada, basándose en . El método de Motzkin utiliza solo 3 multiplicaciones en comparación con las 4 de Horner.

Los valores de cada uno se pueden calcular fácilmente expandiendo e igualando los coeficientes:

Ejemplo

Para calcular la expansión de Taylor , podemos aumentar la escala por un factor de 24, aplicar los pasos anteriores y volver a reducirla. Esto nos da el cálculo de tres multiplicaciones

Mejorando la forma de Horner equivalente (es decir ) por 1 multiplicación.

Algunos métodos generales incluyen el algoritmo Knuth-Eve y el algoritmo Rabin-Winograd. [3]

Evaluación multipunto

La evaluación de un polinomio de grado n en múltiples puntos se puede realizar con multiplicaciones utilizando el método de Horner . Utilizando el enfoque de preprocesamiento anterior, esto se puede reducir a un factor de dos; es decir, a multiplicaciones.

Sin embargo, es posible hacerlo mejor y reducir el requisito de tiempo a solo . [4] La idea es definir dos polinomios que sean cero en la primera y segunda mitad de los puntos respectivamente: y . Luego calculamos y usando el teorema del resto polinomial , que se puede hacer en el tiempo usando una transformada rápida de Fourier . Esto significa y por construcción, donde y son polinomios de grado como máximo . Debido a cómo se definieron y , tenemos

Por lo tanto, para calcular sobre todos los , basta con calcular los polinomios más pequeños y sobre cada mitad de los puntos. Esto nos da un algoritmo de divide y vencerás con , lo que implica por el teorema maestro .


En el caso en que los puntos en los que deseamos evaluar los polinomios tengan alguna estructura, existen métodos más simples. Por ejemplo, Knuth [5] sección 4.6.4 proporciona un método para tabular valores de polinomios del tipo

Evaluación dinámica

En el caso en que no se conocen de antemano, Kedlaya y Umans [6] dieron una estructura de datos para evaluar polinomios sobre un campo finito de tamaño en el tiempo por evaluación después de un preprocesamiento inicial. Larsen [7] demostró que esto es esencialmente óptimo.

La idea es transformar de grado en un polinomio multivariado , tal que y los grados individuales de es como máximo . Dado que esto es sobre , el valor más grande que puede tomar (sobre ) es . Usando el teorema del resto chino , es suficiente evaluar módulo diferentes primos con un producto de al menos . Cada primo puede tomarse como aproximadamente , y el número de primos necesarios, , es aproximadamente el mismo. Haciendo este proceso recursivamente, podemos obtener los primos tan pequeños como . Eso significa que podemos calcular y almacenar en todos los valores posibles en el tiempo y el espacio. Si tomamos , obtenemos , por lo que el requisito de tiempo/espacio es simplemente

Kedlaya y Umans muestran además cómo combinar este preprocesamiento con una evaluación multipunto rápida (FFT). Esto permite algoritmos óptimos para muchos problemas algebraicos importantes, como la composición modular polinómica.

Polinomios específicos

Si bien los polinomios generales requieren operaciones para su evaluación, algunos polinomios se pueden calcular mucho más rápido. Por ejemplo, el polinomio se puede calcular utilizando solo una multiplicación y una suma, ya que

Evaluación de competencias

Un tipo de polinomio particularmente interesante son las potencias como . Estos polinomios siempre se pueden calcular en operaciones. Supongamos, por ejemplo, que necesitamos calcular ; simplemente podríamos comenzar con y multiplicar por para obtener . Luego podemos multiplicar eso por sí mismo para obtener y así sucesivamente para obtener y en solo cuatro multiplicaciones. Otras potencias como se pueden calcular de manera similar de manera eficiente calculando primero por 2 multiplicaciones y luego multiplicando por .

La forma más eficiente de calcular una potencia dada es mediante la exponenciación por adición de cadenas . Sin embargo, esto requiere diseñar un algoritmo específico para cada exponente, y los cálculos necesarios para diseñar estos algoritmos son difíciles ( NP-completo [8] ), por lo que generalmente se prefiere la exponenciación por cuadrado para cálculos efectivos.

Familias de polinomios

A menudo, los polinomios se presentan en una forma diferente a la conocida . Para polinomios en forma de Chebyshev, podemos utilizar el algoritmo de Clenshaw . Para polinomios en forma de Bézier, podemos utilizar el algoritmo de De Casteljau y, para los B-splines, el algoritmo de De Boor .

Polinomios duros

El hecho de que algunos polinomios puedan calcularse significativamente más rápido que los "polinomios generales" sugiere la pregunta: ¿Podemos dar un ejemplo de un polinomio simple que no pueda calcularse en un tiempo mucho menor que su grado? Volker Strassen ha demostrado [9] que el polinomio

no se puede evaluar con menos que multiplicaciones y sumas. Al menos este límite se cumple si solo se permiten operaciones de esos tipos, lo que da lugar a una denominada "cadena polinómica de longitud ".

El polinomio dado por Strassen tiene coeficientes muy grandes, pero mediante métodos probabilísticos se puede demostrar que deben existir polinomios pares con coeficientes sólo 0 y 1 tales que la evaluación requiera al menos multiplicaciones. [10]

En el caso de otros polinomios simples, la complejidad es desconocida. Se supone que el polinomio no se puede calcular en tiempo para ningún . Esto se sustenta en el hecho de que, si se puede calcular rápidamente, entonces la factorización de números enteros se puede calcular en tiempo polinomial, rompiendo el criptosistema RSA . [11]

Polinomios matriciales

A veces, el costo computacional de las multiplicaciones escalares (como ) es menor que el costo computacional de las multiplicaciones "no escalares" (como ). El ejemplo típico de esto son las matrices. Si es una matriz, una multiplicación escalar requiere aproximadamente operaciones aritméticas, mientras que el cálculo requiere aproximadamente (o utilizando la multiplicación rápida de matrices ).

Los polinomios matriciales son importantes, por ejemplo, para calcular la matriz exponencial .

Paterson y Stockmeyer [12] demostraron cómo calcular un polinomio de grado utilizando únicamente multiplicaciones no escalares y multiplicaciones escalares. De este modo , se puede evaluar un polinomio matricial de grado n en tiempo. Si este es , tan rápido como una multiplicación matricial con el algoritmo estándar.

Este método funciona de la siguiente manera: Para un polinomio

sea ​​k el menor entero no menor que Las potencias se calculan con multiplicaciones de matrices, y luego se calculan mediante multiplicación repetida por Ahora,

,

donde i n . Esto requiere simplemente más multiplicaciones no escalares .

Podemos escribir esto sucintamente usando el producto Kronecker :

.

La aplicación directa de este método utiliza multiplicaciones no escalares, pero al combinarlo con la evaluación con preprocesamiento, Paterson y Stockmeyer muestran que se puede reducir a .

Se han propuesto métodos basados ​​en multiplicaciones y adiciones de polinomios matriciales que permiten ahorrar multiplicaciones de matrices no escalares con respecto al método de Paterson-Stockmeyer. [13]

Véase también

Referencias

  1. ^ Carnicer, J.; Gasca, M. (1990). "Evaluación de polinomios multivariados y sus derivadas". Matemáticas de la computación . 54 (189): 231–243. doi : 10.2307/2008692 . JSTOR  2008692.
  2. ^ Motzkin, TS (1955). "Evaluación de polinomios y evaluación de funciones racionales". Boletín de la Sociedad Matemática Americana . 61 (163): 10.
  3. ^ Rabin, Michael O.; Winograd, Shmuel (julio de 1972). "Evaluación rápida de polinomios mediante preparación racional". Communications on Pure and Applied Mathematics . 25 (4): 433–458. doi :10.1002/cpa.3160250405.
  4. ^ Von Zur Gathen, Joaquín ; Jürgen, Gerhard (2013). Álgebra informática moderna . Prensa de la Universidad de Cambridge . Capítulo 10. ISBN 9781139856065.
  5. ^ Knuth, Donald (2005). El arte de la programación informática . Vol. 2: Algoritmos seminuméricos. Addison-Wesley . ISBN 9780201853926.
  6. ^ Kedlaya, Kiran S. ; Umans, Christopher (2011). "Factorización polinómica rápida y composición modular". Revista SIAM de informática . 40 (6): 1767–1802. doi :10.1137/08073408x. hdl : 1721.1/71792 . S2CID  412751.
  7. ^ Larsen, KG (2012). "Límites inferiores de la sonda de celdas superiores para evaluar polinomios". 2012 IEEE 53rd Annual Symposium on Foundations of Computer Science . Vol. 53. IEEE . págs. 293–301. doi :10.1109/FOCS.2012.21. ISBN 978-0-7695-4874-6.S2CID 7906483  .
  8. ^ Downey, Peter; Leong, Benton; Sethi, Ravi (1981). "Computing Sequences with Addition Chains". Revista SIAM de Computación . 10 (3) . Consultado el 27 de enero de 2024 .
  9. ^ Strassen, Volker (1974). "Polinomios con coeficientes racionales que son difíciles de calcular". Revista SIAM de Informática . 3 (2): 128–149. doi :10.1137/0203010.
  10. ^ Schnorr, CP (1979), "Sobre la complejidad aditiva de polinomios y algunos nuevos límites inferiores", Theoretical Computer Science , Lecture Notes in Computer Science, vol. 67, Springer , págs. 286–297, doi :10.1007/3-540-09118-1_30, ISBN 978-3-540-09118-9
  11. ^ Chen, Xi, Neeraj Kayal y Avi Wigderson. Derivadas parciales en la complejidad aritmética y más allá. Now Publishers Inc, 2011.
  12. ^ Paterson, Michael S. ; Stockmeyer, Larry J. (1973). "Sobre el número de multiplicaciones no escalares necesarias para evaluar polinomios". Revista SIAM de Computación . 2 (1): 60–66. doi :10.1137/0202007.
  13. ^ Fasi, Massimiliano (1 de agosto de 2019). "Optimalidad del método de Paterson-Stockmeyer para evaluar polinomios matriciales y funciones matriciales racionales" (PDF) . Álgebra lineal y sus aplicaciones . 574 : 185. doi : 10.1016/j.laa.2019.04.001 . ISSN  0024-3795.