Articulo de referencia

Evaluación polinómica

En matemáticas e informática , la evaluación de polinomios se refiere al cálculo del valor de un polinomio cuando sus indeterminadas se sustituyen por algunos valores. En otras ...

En matemáticas e informática , la evaluación de polinomios se refiere al cálculo del valor de un polinomio cuando sus indeterminadas se sustituyen por algunos valores. En otras palabras, evaluar el polinomioPAG(incógnita1,incógnita2)=2incógnita1incógnita2+incógnita13+4{\displaystyle P(x_{1},x_{2})=2x_{1}x_{2}+x_{1}^{3}+4}enincógnita1=2,incógnita2=3{\displaystyle x_{1}=2,x_{2}=3}consiste en computaciónPAG(2,3)=223+23+4=24.{\displaystyle P(2,3)=2\cdot 2\cdot 3+2^{3}+4=24.}Véase también Anillo de polinomios §  Evaluación de polinomios

Para evaluar el polinomio univariadoanorteincógnitanorte+anorte1incógnitanorte1++a0,{\displaystyle a_{n}x^{n}+a_{n-1}x^{n-1}+\cdots +a_{0},}El método más ingenuo sería utilizarnorte{\displaystyle n}multiplicaciones para calcularanorteincógnitanorte{\displaystyle a_{n}x^{n}}, usarnorte1{\displaystyle n-1}multiplicaciones para calcularanorte1incógnitanorte1{\displaystyle a_{n-1}x^{n-1}}y así sucesivamente para un total denorte(norte+1)2{\displaystyle {\tfrac {n(n+1)}{2}}}multiplicaciones ynorte{\displaystyle n}adiciones. Utilizando mejores métodos, como la regla de Horner , esto se puede reducir anorte{\displaystyle n}multiplicaciones ynorte{\displaystyle n}Adiciones. Si se permite algún preprocesamiento, es posible obtener aún más ahorros.

Fondo

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

En el primer caso, los polinomios se evalúan mediante aritmética de punto flotante , que no es exacta . Por lo tanto, diferentes métodos de evaluación generalmente darán resultados ligeramente distintos. En el segundo caso, los polinomios se evalúan habitualmente en un cuerpo finito , en cuyo caso los resultados son siempre exactos.

Métodos generales

La regla de Horner

El método de Horner evalúa un polinomio utilizando corchetes repetidos: a0+a1incógnita+a2incógnita2+a3incógnita3++anorteincógnitanorte=a0+incógnita(a1+incógnita(a2+incógnita(a3++incógnita(anorte1+incógnitaanorte)))).{\displaystyle {\begin{aligned}a_{0}+&a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots +a_{n}x^{n}\\&=a_{0}+x{\bigg (}a_{1}+x{\Big (}a_{2}+x{\big (}a_{3}+\cdots +x(a_{n-1}+x\,a_{n})\cdots {\big )}{\Big )}{\bigg )}.\end{aligned}}} Este método reduce el número de multiplicaciones y sumas a solonorte{\displaystyle n}

El método de Horner es tan común que la " operación de multiplicación y acumulación " está incluida en el conjunto de instrucciones de muchos procesadores informáticos, lo que permite realizar las operaciones de suma y multiplicación en un solo paso combinado.

Multivariado

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

PAG(incógnita,y)=4+incógnita+2incógnitay+2incógnita2y+incógnita2y2{\displaystyle P(x,y)=4+x+2xy+2x^{2}y+x^{2}y^{2}}

se puede escribir como

PAG(incógnita,y)=4+incógnita(1+y(2)+incógnita(y(2+y)))oPAG(incógnita,y)=4+incógnita+y(incógnita(2+incógnita(2))+y(incógnita2)).{\displaystyle {\begin{aligned}P(x,y)&=4+x(1+y(2)+x(y(2+y)))\quad {\text{o}}\\P(x,y)&=4+x+y(x(2+x(2))+y(x^{2})).\end{aligned}}}

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 crucial para la eficiencia computacional. Un método conocido como el esquema de Estrin calcula un polinomio (de una sola variable) siguiendo un patrón de árbol:

PAG(incógnita)=(a0+a1incógnita)+(a2+a3incógnita)incógnita2+((a4+a5incógnita)+(a6+a7incógnita)incógnita2)incógnita4.{\displaystyle {\begin{aligned}P(x)=(a_{0}+a_{1}x)+(a_{2}+a_{3}x)x^{2}+((a_{4}+a_{5}x)+(a_{6}+a_{7}x)x^{2})x^{4}.\end{aligned}}}

Combined by exponentiation by squaring, this allows parallelizing the computation. A similar idea[2] enables to involve fast matrix multiplication algorithms to evaluate a polynomial in a series of points.

Evaluation with preprocessing

Arbitrary polynomials can be evaluated with fewer operations than Horner's rule requires if we first "preprocess" the coefficients an,,a0{\displaystyle a_{n},\dots ,a_{0}}.

An example was first given by Motzkin[3] who noted that

P(x)=x4+a3x3+a2x2+a1x+a0{\displaystyle P(x)=x^{4}+a_{3}x^{3}+a_{2}x^{2}+a_{1}x+a_{0}}

can be written as

y=(x+β0)x+β1,P(x)=(y+x+β2)y+β3,{\displaystyle y=(x+\beta _{0})x+\beta _{1},\quad P(x)=(y+x+\beta _{2})y+\beta _{3},}

where the values β0,,β3{\displaystyle \beta _{0},\dots ,\beta _{3}} are computed in advance, based on a0,,a3{\displaystyle a_{0},\dots ,a_{3}}. Motzkin's method uses just 3 multiplications compared to Horner's 4.

The values for each βi{\displaystyle \beta _{i}} can be easily computed by expanding P(x){\displaystyle P(x)} and equating the coefficients:

β0=12(a31),z=a2β0(β0+1),β1=a1β0z,β2=z2β1,β3=a0β1(β1+β2).{\displaystyle {\begin{aligned}\beta _{0}&={\tfrac {1}{2}}(a_{3}-1),\quad &z&=a_{2}-\beta _{0}(\beta _{0}+1),\quad &\beta _{1}&=a_{1}-\beta _{0}z,\\\beta _{2}&=z-2\beta _{1},\quad &\beta _{3}&=a_{0}-\beta _{1}(\beta _{1}+\beta _{2}).\end{aligned}}}

Example

To compute the Taylor expansionexp(x)1+x+x2/2+x3/6+x4/24{\displaystyle \exp(x)\approx 1+x+x^{2}/2+x^{3}/6+x^{4}/24}, we can upscale by a factor 24, apply the above steps, and scale back down. That gives us the three multiplication computation

y=(x+1.5)x+11.625,P(x)=(y+x15)y/24+2.63477.{\displaystyle y=(x+1.5)x+11.625,\quad P(x)=(y+x-15)y/24+2.63477.}

Improving over the equivalent Horner form (that is P(x)=1+x(1+x(1/2+x(1/6+x/24))){\displaystyle P(x)=1+x(1+x(1/2+x(1/6+x/24)))}) by 1 multiplication.

Some general methods include the Knuth–Eve algorithm and the Rabin–Winograd algorithm. [4]

Multipoint evaluation

Evaluation of a degree-n polynomial P(x){\displaystyle P(x)} at multiple points x1,,xm{\displaystyle x_{1},\dots ,x_{m}} can be done with mn{\displaystyle mn} multiplications by using Horner's methodm{\displaystyle m} times. Using the above preprocessing approach, this can be reduced by a factor of two; that is, to mn/2{\displaystyle mn/2} multiplications.

However, it is possible to do better and reduce the time requirement to just O((n+m)log2(n+m)){\displaystyle O{\big (}(n+m)\log ^{2}(n+m){\big )}}.[5] The idea is to define two polynomials that are zero in respectively the first and second half of the points: m0(x)=(xx1)(xxn/2){\displaystyle m_{0}(x)=(x-x_{1})\cdots (x-x_{n/2})} and m1(x)=(xxn/2+1)(xxn){\displaystyle m_{1}(x)=(x-x_{n/2+1})\cdots (x-x_{n})}. We then compute R0=Pmodm0{\displaystyle R_{0}=P{\bmod {m}}_{0}} and R1=Pmodm1{\displaystyle R_{1}=P{\bmod {m}}_{1}} using the Polynomial remainder theorem, which can be done in O(nlogn){\displaystyle O(n\log n)} time using a fast Fourier transform. This means P(x)=Q0(x)m0(x)+R0(x){\displaystyle P(x)=Q_{0}(x)m_{0}(x)+R_{0}(x)} and P(x)=Q1(x)m1(x)+R1(x){\displaystyle P(x)=Q_{1}(x)m_{1}(x)+R_{1}(x)} by construction, where R0{\displaystyle R_{0}} and R1{\displaystyle R_{1}} are polynomials of degree at most n/2{\displaystyle n/2}. Because of how m0{\displaystyle m_{0}} and m1{\displaystyle m_{1}} were defined, we have

R0(xi)=P(xi)for in/2andR1(xi)=P(xi)for i>n/2.{\displaystyle {\begin{aligned}R_{0}(x_{i})&=P(x_{i})\quad {\text{for }}i\leq n/2\quad {\text{and}}\\R_{1}(x_{i})&=P(x_{i})\quad {\text{for }}i>n/2.\end{aligned}}}

Thus to compute P{\displaystyle P} on all n{\displaystyle n} of the xi{\displaystyle x_{i}}, it suffices to compute the smaller polynomials R0{\displaystyle R_{0}} and R1{\displaystyle R_{1}} on each half of the points. This gives us a divide-and-conquer algorithm with T(n)=2T(n/2)+nlogn{\displaystyle T(n)=2T(n/2)+n\log n}, which implies T(n)=O(n(logn)2){\displaystyle T(n)=O(n(\log n)^{2})} by the master theorem.

In the case where the points in which we wish to evaluate the polynomials have some structure, simpler methods exist. For example, Knuth[6] section 4.6.4 gives a method for tabulating polynomial values of the type

P(x0+h),P(x0+2h),.{\displaystyle P(x_{0}+h),P(x_{0}+2h),\dots .}

Dynamic evaluation

In the case where x1,,xm{\displaystyle x_{1},\dots ,x_{m}} are not known in advance, Kedlaya and Umans[7] gave a data structure for evaluating polynomials over a finite field of size Fq{\displaystyle F_{q}} in time (logn)O(1)(log2q)1+o(1){\displaystyle (\log n)^{O(1)}(\log _{2}q)^{1+o(1)}}por evaluación después de un preprocesamiento inicial. Larsen [ 8 ] demostró que esto era esencialmente óptimo.

La idea es transformarPAG(incógnita){\displaystyle P(x)}de gradonorte{\displaystyle n}en un polinomio multivariadoF(incógnita1,incógnita2,,incógnitametro){\displaystyle f(x_{1},x_{2},\dots ,x_{m})}, de tal manera quePAG(incógnita)=F(incógnita,incógnitad,incógnitad2,,incógnitadmetro){\displaystyle P(x)=f(x,x^{d},x^{d^{2}},\dots ,x^{d^{m}})}y los grados individuales deF{\displaystyle f}es como máximod{\displaystyle d}. Dado que esto ha terminadomodq{\displaystyle {\bmod {q}}}, el mayor valorF{\displaystyle f}puede tomar (más deZ{\displaystyle \mathbb {Z} }) esMETRO=dmetro(q1)dmetro{\displaystyle M=d^{m}(q-1)^{dm}}. Utilizando el teorema chino del resto , basta con evaluarF{\displaystyle f}módulo diferentes primospag1,,pag{\displaystyle p_{1},\dots ,p_{\ell }}con un producto al menosMETRO{\displaystyle M}Cada número primo puede considerarse aproximadamente igual a...registroMETRO=O(dmetroregistroq){\displaystyle \log M=O(dm\log q)}y el número de primos necesarios,{\displaystyle \ell }es aproximadamente lo mismo. Al realizar este proceso recursivamente, podemos obtener primos tan pequeños comoregistroregistroq{\displaystyle \log \log q}Eso significa que podemos calcular y almacenarF{\displaystyle f}en todos los valores posibles enT=(registroregistroq)metro{\displaystyle T=(\log \log q)^{m}}tiempo y espacio. Si tomamosd=registroq{\displaystyle d=\log q}, obtenemosmetro=registronorteregistroregistroq{\displaystyle m={\tfrac {\log n}{\log \log q}}}, por lo que el requisito de tiempo/espacio esnorteregistroregistroqregistroregistroregistroq.{\displaystyle n^{\frac {\log \log q}{\log \log \log q}}.}

Kedlaya y Umans muestran además cómo combinar este preprocesamiento con una evaluación multipunto rápida mediante la transformada rápida de Fourier. Esto permite obtener algoritmos óptimos para muchos problemas algebraicos importantes, como la composición modular polinomial .

Polinomios específicos

Si bien los polinomios generales requierenΩ(norte){\displaystyle \Omega (n)}operaciones para evaluar, algunos polinomios se pueden calcular mucho más rápido. Por ejemplo, el polinomioPAG(incógnita)=incógnita2+2incógnita+1{\displaystyle P(x)=x^{2}+2x+1}se puede calcular usando solo una multiplicación y una suma ya quePAG(incógnita)=(incógnita+1)2{\displaystyle P(x)=(x+1)^{2}}.

Evaluación de poderes

Un tipo de polinomio particularmente interesante son las potencias comoincógnitanorte{\displaystyle x^{n}}. Dichos polinomios siempre se pueden calcular enO(registronorte){\displaystyle O(\log n)}operaciones. Supongamos, por ejemplo, que necesitamos calcularincógnita16{\displaystyle x^{16}}; podríamos simplemente comenzar conincógnita{\displaystyle x}y multiplicar porincógnita{\displaystyle x}Llegarincógnita2{\displaystyle x^{2}}. Luego podemos multiplicarlo por sí mismo para obtenerincógnita4{\displaystyle x^{4}}y así sucesivamente para obtenerincógnita8{\displaystyle x^{8}}yincógnita16{\displaystyle x^{16}}en tan solo cuatro multiplicaciones. Otras potencias comoincógnita5{\displaystyle x^{5}}De manera similar, se puede calcular de manera eficiente calculando primeroincógnita4{\displaystyle x^{4}}por 2 multiplicaciones y luego multiplicando porincógnita{\displaystyle x}.

La forma más eficiente de calcular una potencia determinadaincógnitanorte{\displaystyle x^{n}}se proporciona mediante la exponenciación en cadena de adición . Sin embargo, esto requiere diseñar un algoritmo específico para cada exponente, y el cálculo necesario para diseñar estos algoritmos es difícil ( NP-completo [ 9 ] ), por lo que la exponenciación por cuadrado se prefiere generalmente para cálculos efectivos.

Familias de polinomios

A menudo, los polinomios aparecen en una forma diferente a la bien conocida.anorteincógnitanorte++a1incógnita+a0{\displaystyle a_{n}x^{n}+\dots +a_{1}x+a_{0}}Para polinomios en forma de Chebyshev podemos usar el algoritmo de Clenshaw . Para polinomios en forma de Bézier podemos usar el algoritmo de De Casteljau , y para B-splines existe el algoritmo de De Boor .

Polinomios difíciles

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

PAG(incógnita)=k=0norte22knorte3incógnitak{\displaystyle P(x)=\sum _{k=0}^{n}2^{2^{kn^{3}}}x^{k}}

no se puede evaluar con menos de12norte2{\displaystyle {\tfrac {1}{2}}n-2}multiplicaciones ynorte4{\displaystyle n-4}adiciones. Al menos este límite se cumple si solo se permiten operaciones de esos tipos, dando lugar a una llamada "cadena polinómica de longitud<norte2/registronorte{\displaystyle <n^{2}/\log n}".

El polinomio dado por Strassen tiene coeficientes muy grandes, pero mediante métodos probabilísticos se puede demostrar que deben existir incluso polinomios con coeficientes solo 0 y 1 tales que la evaluación requiere al menosΩ(norte/registronorte){\displaystyle \Omega (n/\log n)}multiplicaciones. [ 11 ]

Para otros polinomios simples, la complejidad es desconocida. El polinomio(incógnita+1)(incógnita+2)(incógnita+norte){\displaystyle (x+1)(x+2)\cdots (x+n)}Se conjetura que no es computable en el tiempo(registronorte)do{\displaystyle (\log n)^{c}}para cualquierdo{\displaystyle c}Esto se ve respaldado por el hecho de que, si se puede calcular rápidamente, la factorización de enteros se puede calcular en tiempo polinomial, rompiendo el criptosistema RSA . [ 12 ]

Polinomios matriciales

A veces el costo computacional de las multiplicaciones escalares (comoaincógnita{\displaystyle ax}) es menor que el costo computacional de las multiplicaciones "no escalares" (comoincógnita2{\displaystyle x^{2}}). El ejemplo típico de esto son las matrices. SiMETRO{\displaystyle M}es unmetro×metro{\displaystyle m\times m}matriz, una multiplicación escalaraMETRO{\displaystyle aM}toma aproximadamentemetro2{\displaystyle m^{2}}operaciones aritméticas, mientras se realizan cálculosMETRO2{\displaystyle M^{2}}toma aproximadamentemetro3{\displaystyle m^{3}}(ometro2.3{\displaystyle m^{2.3}}utilizando la multiplicación rápida de matrices ).

Los polinomios matriciales se utilizan, por ejemplo, para calcular exponenciales matriciales .

Paterson y Stockmeyer [ 13 ] mostraron cómo calcular un gradonorte{\displaystyle n}polinomio usando soloO(norte){\displaystyle O({\sqrt {n}})}multiplicaciones no escalares yO(norte){\displaystyle O(n)}multiplicaciones escalares. Por lo tanto, un polinomio matricial de grado n puede evaluarse enO(metroαnorte+metro2norte){\displaystyle O(m^{\alpha }{\sqrt {n}}+m^{2}n)}tiempo, dondemetroα{\displaystyle m^{\alpha }} es el tiempo necesario para multiplicar dosmetro×metro{\displaystyle m\times m} matices. Simetro=norte{\displaystyle m=n}esto esO(norteβ),{\displaystyle O(n^{\beta }),}dondeβ=3.5{\displaystyle \beta =3.5}oβ=3{\displaystyle \beta =3}Dependiendo de si se utiliza la multiplicación de matrices usual o rápida. Esto debe compararse con el método de Horner usual , que daβ=4{\displaystyle \beta =4}oβ=3.3{\displaystyle \beta =3.3}respectivamente .

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

PAG(METRO)=anorte1METROnorte1++a1METRO+a0I,{\displaystyle P(M)=a_{n-1}M^{n-1}+\dots +a_{1}M+a_{0}I,}

Sea k el menor entero no menor quenorte.{\displaystyle {\sqrt {n}}.} Los poderesMETRO,METRO2,,METROk{\displaystyle M,M^{2},\dots ,M^{k}}se calculan conk{\displaystyle k}multiplicaciones de matrices yMETRO2k,METRO3k,,METROk2k{\displaystyle M^{2k},M^{3k},\dots ,M^{k^{2}-k}}luego se calculan mediante multiplicación repetida porMETROk.{\displaystyle M^{k}.} Ahora,

PAG(METRO)=(a0I+a1METRO++ak1METROk1)+(akI+ak+1METRO++a2k1METROk1)METROk++(anortekI+anortek+1METRO++anorte1METROk1)METROk2k,{\displaystyle {\begin{aligned}P(M)=&\,(a_{0}I+a_{1}M+\dots +a_{k-1}M^{k-1})\\+&\,(a_{k}I+a_{k+1}M+\dots +a_{2k-1}M^{k-1})M^{k}\\+&\,\dots \\+&\,(a_{n-k}I+a_{n-k+1}M+\dots +a_{n-1}M^{k-1})M^{k^{2}-k},\end{aligned}}},

dóndeai=0{\displaystyle a_{i}=0}para in . Esto requiere simplementek{\displaystyle k}más multiplicaciones no escalares.

La aplicación directa de este método utiliza2norte{\displaystyle 2{\sqrt {n}}}multiplicaciones no escalares, pero combinándolo con Evaluación con preprocesamiento , Paterson y Stockmeyer muestran que se puede reducir a2norte{\displaystyle {\sqrt {2n}}}.

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

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. Borodin, A.; Munro, I (1971). "Evaluación de polinomios en muchos puntos". Information Processing Letters . 1 (2): 66– 68. doi : 10.1016/0020-0190(71)90009-3 .
  3. Motzkin, TS (1955). "Evaluación de polinomios y evaluación de funciones racionales". Boletín de la Sociedad Matemática Americana . 61 (163): 10.
  4. 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 .
  5. Von Zur Gathen, Joaquín ; Jürgen, Gerhard (2013). Álgebra informática moderna . Prensa de la Universidad de Cambridge . Capítulo 10. ISBN 9781139856065.
  6. Knuth, Donald (2005). El arte de la programación informática . Vol. 2: Algoritmos seminuméricos. Addison-Wesley . ISBN  9780201853926.
  7. Kedlaya, Kiran S. ; Umans, Christopher (2011). "Fast Polynomial Factorization and Modular Composition" . SIAM Journal on Computing . 40 (6): 1767– 1802. doi : 10.1137/08073408x . hdl : 1721.1/71792 . S2CID 412751 . 
  8. Larsen, KG (2012). "Higher Cell Probe Lower Bounds for Evaluating Polynomials". 2012 IEEE 53rd Annual Symposium on Foundations of Computer Science . Vol. 53. IEEE . pp. 293–301 . doi : 10.1109/FOCS.2012.21 . ISBN   978-0-7695-4874-6. S2CID 7906483 . 
  9. Downey, Peter; Leong, Benton; Sethi, Ravi (1981). "Cálculo de secuencias con cadenas de adición" . SIAM Journal on Computing . 10 (3): 638– 646. doi : 10.1137/0210047 . Consultado el 27 de enero de 2024 .
  10. Strassen, Volker (1974). "Polinomios con coeficientes racionales difíciles de calcular". SIAM Journal on Computing . 3 (2): 128– 149. doi : 10.1137/0203010 .
  11. Schnorr, CP (1979), "Sobre la complejidad aditiva de los polinomios y algunas nuevas cotas inferiores", Theoretical Computer Science , Lecture Notes in Computer Science, vol. 67, Springer , pp. 286–297 , doi : 10.1007/3-540-09118-1_30 , ISBN   978-3-540-09118-9{{citation}}: CS1 mantenimiento: parámetro de trabajo con ISBN ( enlace )
  12. Chen, Xi, Neeraj Kayal y Avi Wigderson. Derivadas parciales en complejidad aritmética y más allá. Now Publishers Inc, 2011.
  13. Paterson, Michael S. ; Stockmeyer, Larry J. (1973). "Sobre el número de multiplicaciones no escalares necesarias para evaluar polinomios". SIAM Journal on Computing . 2 (1): 60– 66. doi : 10.1137/0202007 .
  14. 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 .