El algoritmo NTT (Number Theoretic Transform) convierte un polinomio en un campo finito de su forma de coeficientes a su forma de puntos.
Si un polinomio tiene grado d d d , entonces lo evaluamos en las k k k -ésimas raíces de la unidad, donde k > d . k\gt d. k > d .
En lugar de evaluar el polinomio f ( x ) f(x) f ( x ) en cada punto del conjunto de las k k k -ésimas raíces de la unidad, { 1 , ω , ω 2 , . . . , ω k − 1 } \set{1,\omega,\omega^2,...,\omega^{k-1}} { 1 , ω , ω 2 , ... , ω k − 1 } , utilizamos el teorema de preservación de la imagen para funciones multivaluadas para evaluar la función multivaluada creada al sustituir x x x en f f f por x k \sqrt[k]{x} k x en el dominio { 1 } \set{1} { 1 } . Luego, expandimos iterativamente las evaluaciones de la raíz cuadrada de { 1 } \set{1} { 1 } a { 1 , ω k / 2 } \set{1,\omega^{k/2}} { 1 , ω k /2 } a { 1 , ω k / 4 , ω k / 2 , − ω k / 4 } \set{1,\omega^{k/4},\omega^{k/2},-\omega^{k/4}} { 1 , ω k /4 , ω k /2 , − ω k /4 } y así sucesivamente hasta que la evaluación se expande a las k k k -ésimas raíces de la unidad.
El tiempo de ejecución de este método es O ( n log n ) \mathcal{O}(n \log n) O ( n log n ) .
Evaluando f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 f(x)=a_0+a_1x+a_2x^2+a_3x^3 f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 en las 4-tas raíces de la unidad
Primero, factorizamos la función para maximizar las apariciones de x 2 x^2 x 2 , ya que 2 = k / 2 2=k/2 2 = k /2 y x k / 2 x^{k/2} x k /2 es fácil de evaluar en una raíz de la unidad (solo resulta en { 1 , − 1 } \set{1,-1} { 1 , − 1 } dependiendo de si la potencia de la raíz de la unidad es par o impar).
Esto crea la siguiente función:
f ( x ) = a 0 + a 2 x 2 + x ( a 1 + a 3 x 2 ) f(x)=a_0+a_2x^2+x(a_1+a_3x^2) f ( x ) = a 0 + a 2 x 2 + x ( a 1 + a 3 x 2 )
A continuación, transformamos f f f para que x → x 4 x\rightarrow\sqrt[4]{x} x → 4 x , lo que nos da
f ( x ) = a 0 + a 2 x + x 4 ( a 1 + a 3 x ) f(x)=a_0+a_2\sqrt{x}+\sqrt[4]{x}(a_1+a_3\sqrt{x}) f ( x ) = a 0 + a 2 x + 4 x ( a 1 + a 3 x )
Aquí está el diagrama de expansión de la raíz cuadrada:
Ahora comparamos el resultado con la evaluación de f ( x ) f(x) f ( x ) en las 4-tas raíces de la unidad una por una:
f ( 1 ) = a 0 + a 1 ( 1 ) + a 2 ( 1 ) 2 + a 3 ( 1 ) 3 f ( − 1 ) = a 0 + a 1 ( − 1 ) + a 2 ( − 1 ) 2 + a 3 ( − 1 ) 3 f ( ω ) = a 0 + a 1 ( ω ) + a 2 ( ω ) 2 + a 3 ( ω ) 3 f ( − ω ) = a 0 + a 1 ( − ω ) + a 2 ( − ω ) 2 + a 3 ( − ω ) 3 \begin{align*}
f(1) &= a_0 &+& a_1(1) &+& a_2(1)^2 &+& a_3(1)^3\\
f(-1) &= a_0 &+& a_1(-1) &+& a_2(-1)^2 &+& a_3(-1)^3\\
f(\omega) &= a_0 &+& a_1(\omega) &+& a_2(\omega)^2 &+& a_3(\omega)^3\\
f(-\omega) &= a_0 &+& a_1(-\omega) &+& a_2(-\omega)^2 &+& a_3(-\omega)^3
\end{align*} f ( 1 ) f ( − 1 ) f ( ω ) f ( − ω ) = a 0 = a 0 = a 0 = a 0 + + + + a 1 ( 1 ) a 1 ( − 1 ) a 1 ( ω ) a 1 ( − ω ) + + + + a 2 ( 1 ) 2 a 2 ( − 1 ) 2 a 2 ( ω ) 2 a 2 ( − ω ) 2 + + + + a 3 ( 1 ) 3 a 3 ( − 1 ) 3 a 3 ( ω ) 3 a 3 ( − ω ) 3
Tenemos que ω 2 = ( − ω 2 ) = − 1 \omega^2=(-\omega^2)=-1 ω 2 = ( − ω 2 ) = − 1 y ω 3 = − ω \omega^3=-\omega ω 3 = − ω y ( − ω ) 3 = ( − 1 ) 3 ( ω ) 3 = − ω 3 = − ( − ω ) = ω (-\omega)^3=(-1)^3(\omega)^3=-\omega^3=-(-\omega)=\omega ( − ω ) 3 = ( − 1 ) 3 ( ω ) 3 = − ω 3 = − ( − ω ) = ω . Por sustitución, obtenemos:
f ( 1 ) = a 0 + a 1 + a 2 + a 3 f ( − 1 ) = a 0 − a 1 + a 2 − a 3 f ( ω ) = a 0 + a 1 ω − a 2 − a 3 ω f ( − ω ) = a 0 − a 1 ω − a 2 + a 3 ω \begin{align*}
f(1) &= a_0 &+& a_1 &+& a_2 &+& a_3\\
f(-1) &= a_0 &-& a_1 &+& a_2 &-& a_3\\
f(\omega) &= a_0 &+& a_1\omega &-& a_2 &-& a_3\omega\\
f(-\omega) &= a_0 &-& a_1\omega &-& a_2 &+& a_3\omega
\end{align*} f ( 1 ) f ( − 1 ) f ( ω ) f ( − ω ) = a 0 = a 0 = a 0 = a 0 + − + − a 1 a 1 a 1 ω a 1 ω + + − − a 2 a 2 a 2 a 2 + − − + a 3 a 3 a 3 ω a 3 ω
Ejercicio: Utilice el método anterior para evaluar a 0 + a 1 x + a 2 x 2 a_0+a_1x+a_2x^2 a 0 + a 1 x + a 2 x 2 en las 4-tas raíces de la unidad. Pista: use el ejemplo anterior y asigne a 3 = 0 a_3=0 a 3 = 0 .
La altura del árbol es log n \log n log n y realizamos O ( n ) \mathcal{O}(n) O ( n ) operaciones en cada fila, por lo que el tiempo de ejecución es O ( n log n ) \mathcal{O}(n \log n) O ( n log n ) .
Evaluando f ( x ) = a 0 + a 1 x + . . . + a 7 x 7 f(x)=a_0+a_1x+...+a_7x^7 f ( x ) = a 0 + a 1 x + ... + a 7 x 7 en las 8-vas raíces de la unidad
Primero, reorganizamos el polinomio para maximizar el número de términos x 4 x^4 x 4 (ya que k = 8). Esto nos da:
f ( x ) = a 0 + a 4 x 4 + x 2 ( a 2 + a 6 x 4 ) + x ( ( a 1 + a 5 x 4 ) + x 2 ( a 3 + a 7 x 4 ) ) f(x)=a_0+a_4x^4+x^2(a_2+a_6x^4)+x((a_1+a_5x^4)+x^2(a_3+a_7x^4)) f ( x ) = a 0 + a 4 x 4 + x 2 ( a 2 + a 6 x 4 ) + x (( a 1 + a 5 x 4 ) + x 2 ( a 3 + a 7 x 4 ))
Ahora sustituimos x → x 8 x\rightarrow\sqrt[8]{x} x → 8 x para obtener nuestra función multivaluada g ( x ) g(x) g ( x )
g ( x ) = a 0 + a 4 x + x 4 ( a 2 + a 6 x ) + x 8 ( ( a 1 + a 5 x ) + x 4 ( a 3 + a 7 x ) ) g(x)=a_0+a_4\sqrt{x}+\sqrt[4]{x}(a_2+a_6\sqrt{x})+\sqrt[8]{x}((a_1+a_5\sqrt{x})+\sqrt[4]{x}(a_3+a_7\sqrt{x})) g ( x ) = a 0 + a 4 x + 4 x ( a 2 + a 6 x ) + 8 x (( a 1 + a 5 x ) + 4 x ( a 3 + a 7 x ))
Dado que dibujar el árbol de evaluación en una sola imagen sería bastante grande, dibujaremos el lado izquierdo del árbol donde evaluamos 1 = 1 \sqrt{1}=1 1 = 1 y mostraremos ese diagrama primero:
A partir de la imagen anterior, tenemos que
f ( 1 ) = ( ( a 0 + a 4 ) + ( a 2 + a 6 ) ) + ( ( a 1 + a 5 ) + ( a 3 + a 7 ) ) f ( − 1 ) = ( ( a 0 + a 4 ) + ( a 2 + a 6 ) ) + ( ( a 1 + a 5 ) + ( a 3 + a 7 ) ) f ( ω 2 ) = ( ( a 0 + a 4 ) − ( a 2 + a 6 ) ) + ω ( ( a 1 + a 5 ) − ( a 3 + a 7 ) ) f ( − ω 2 ) = ( ( a 0 + a 4 ) − ( a 2 + a 6 ) ) − ω ( ( a 1 + a 5 ) − ( a 3 + a 7 ) ) \begin{align*}
f(1)=((a_0+a_4)+(a_2+a_6))+((a_1+a_5)+(a_3+a_7))\\
f(-1)=((a_0+a_4)+(a_2+a_6))+((a_1+a_5)+(a_3+a_7))\\
f(\omega^2)=((a_0+a_4)-(a_2+a_6))+\omega((a_1+a_5)-(a_3+a_7))\\
f(-\omega^2)=((a_0+a_4)-(a_2+a_6))-\omega((a_1+a_5)-(a_3+a_7))\\
\end{align*} f ( 1 ) = (( a 0 + a 4 ) + ( a 2 + a 6 )) + (( a 1 + a 5 ) + ( a 3 + a 7 )) f ( − 1 ) = (( a 0 + a 4 ) + ( a 2 + a 6 )) + (( a 1 + a 5 ) + ( a 3 + a 7 )) f ( ω 2 ) = (( a 0 + a 4 ) − ( a 2 + a 6 )) + ω (( a 1 + a 5 ) − ( a 3 + a 7 )) f ( − ω 2 ) = (( a 0 + a 4 ) − ( a 2 + a 6 )) − ω (( a 1 + a 5 ) − ( a 3 + a 7 ))
Ahora expandimos el lado derecho del árbol donde x = − 1 \sqrt{x}=-1 x = − 1 :
A partir de ese resultado, tenemos que:
f ( ω ) = ( ( a 0 − a 4 ) + ω 2 ( a 2 − a 6 ) ) + ω ( ( a 1 − a 5 ) + ω 2 ( a 3 − a 7 ) ) f ( − ω ) = ( ( a 0 − a 4 ) + ω 2 ( a 2 − a 6 ) ) − ω ( ( a 1 − a 5 ) + ω 2 ( a 3 − a 7 ) ) f ( ω 3 ) = ( ( a 0 − a 4 ) − ω 2 ( a 2 − a 6 ) ) + ω 3 ( ( a 1 − a 5 ) − ω 2 ( a 3 − a 7 ) ) f ( − ω 3 ) = ( ( a 0 − a 4 ) − ω 2 ( a 2 − a 6 ) ) − ω 3 ( ( a 1 − a 5 ) − ω 2 ( a 3 − a 7 ) ) \begin{align*}
f(\omega)=((a_0-a_4)+\omega^2(a_2-a_6))+\omega((a_1-a_5)+\omega^2(a_3-a_7))\\
f(-\omega)=((a_0-a_4)+\omega^2(a_2-a_6))-\omega((a_1-a_5)+\omega^2(a_3-a_7))\\
f(\omega^3)=((a_0-a_4)-\omega^2(a_2-a_6))+\omega^3((a_1-a_5)-\omega^2(a_3-a_7))\\
f(-\omega^3)=((a_0-a_4)-\omega^2(a_2-a_6))-\omega^3((a_1-a_5)-\omega^2(a_3-a_7))
\end{align*} f ( ω ) = (( a 0 − a 4 ) + ω 2 ( a 2 − a 6 )) + ω (( a 1 − a 5 ) + ω 2 ( a 3 − a 7 )) f ( − ω ) = (( a 0 − a 4 ) + ω 2 ( a 2 − a 6 )) − ω (( a 1 − a 5 ) + ω 2 ( a 3 − a 7 )) f ( ω 3 ) = (( a 0 − a 4 ) − ω 2 ( a 2 − a 6 )) + ω 3 (( a 1 − a 5 ) − ω 2 ( a 3 − a 7 )) f ( − ω 3 ) = (( a 0 − a 4 ) − ω 2 ( a 2 − a 6 )) − ω 3 (( a 1 − a 5 ) − ω 2 ( a 3 − a 7 ))
Combinando las evaluaciones y distribuyendo los términos omega, obtenemos:
f ( 1 ) = a 0 + a 4 + a 2 + a 6 + a 1 + a 5 + a 3 + a 7 f ( − 1 ) = a 0 + a 4 + a 2 + a 6 − a 1 − a 5 − a 3 − a 7 f ( ω 2 ) = a 0 + a 4 − a 2 − a 6 + a 1 ω 2 + a 5 ω 2 − a 3 ω 2 − a 7 ω 2 f ( − ω 2 ) = a 0 + a 4 − a 2 − a 6 − a 1 ω 2 − a 5 ω 2 + a 3 ω 2 + a 7 ω 2 f ( ω ) = a 0 − a 4 + a 2 ω 2 − a 6 ω 2 + a 1 ω − a 5 ω + a 3 ω 3 − a 7 ω 3 f ( − ω ) = a 0 − a 4 + a 2 ω 2 − a 6 ω 2 − a 1 ω + a 5 ω − a 3 ω 3 + a 7 ω 3 f ( ω 3 ) = a 0 − a 4 − a 2 ω 2 + a 6 ω 2 + a 1 ω 3 − a 5 ω 3 + a 3 ω − a 7 ω f ( − ω 3 ) = a 0 − a 4 − a 2 ω 2 + a 6 ω 2 − a 1 ω 3 + a 5 ω 3 − a 3 ω a 7 ω \begin{align*}
f(1) &= a_0 &+ a_4 &+ a_2 &+ a_6 &+ a_1 &+ a_5 &+ a_3 &+ a_7\\f(-1) &= a_0 &+ a_4 &+ a_2 &+ a_6 &- a_1 &- a_5 &- a_3 &- a_7\\f(\omega^2) &= a_0 &+ a_4 &- a_2 &- a_6 &+ a_1\omega^2 &+ a_5\omega^2 &- a_3\omega^2 &- a_7\omega^2\\f(-\omega^2)&= a_0 &+ a_4 &- a_2 &- a_6 &- a_1\omega^2 &- a_5\omega^2 &+ a_3\omega^2 &+ a_7\omega^2\\f(\omega) &= a_0 &- a_4 &+ a_2\omega^2 &- a_6\omega^2 &+ a_1\omega &- a_5\omega &+ a_3\omega^3 &- a_7\omega^3\\f(-\omega) &= a_0 &- a_4 &+ a_2\omega^2 &- a_6\omega^2 &- a_1\omega &+ a_5\omega &- a_3\omega^3 &+ a_7\omega^3\\f(\omega^3) &= a_0 &- a_4 &- a_2\omega^2 &+ a_6\omega^2 &+ a_1\omega^3 &- a_5\omega^3 &+ a_3\omega &- a_7\omega\\f(-\omega^3)&= a_0 &- a_4 &- a_2\omega^2 &+ a_6\omega^2 &- a_1\omega^3 &+ a_5\omega^3 &- a_3\omega & a_7\omega\end{align*} f ( 1 ) f ( − 1 ) f ( ω 2 ) f ( − ω 2 ) f ( ω ) f ( − ω ) f ( ω 3 ) f ( − ω 3 ) = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 + a 4 + a 4 + a 4 + a 4 − a 4 − a 4 − a 4 − a 4 + a 2 + a 2 − a 2 − a 2 + a 2 ω 2 + a 2 ω 2 − a 2 ω 2 − a 2 ω 2 + a 6 + a 6 − a 6 − a 6 − a 6 ω 2 − a 6 ω 2 + a 6 ω 2 + a 6 ω 2 + a 1 − a 1 + a 1 ω 2 − a 1 ω 2 + a 1 ω − a 1 ω + a 1 ω 3 − a 1 ω 3 + a 5 − a 5 + a 5 ω 2 − a 5 ω 2 − a 5 ω + a 5 ω − a 5 ω 3 + a 5 ω 3 + a 3 − a 3 − a 3 ω 2 + a 3 ω 2 + a 3 ω 3 − a 3 ω 3 + a 3 ω − a 3 ω + a 7 − a 7 − a 7 ω 2 + a 7 ω 2 − a 7 ω 3 + a 7 ω 3 − a 7 ω a 7 ω
A continuación, ordenamos los coeficientes en forma ascendente:
f ( 1 ) = a 0 + a 1 + a 2 + a 3 + a 4 + a 5 + a 6 + a 7 f ( − 1 ) = a 0 − a 1 + a 2 − a 3 + a 4 − a 5 + a 6 − a 7 f ( ω 2 ) = a 0 + a 1 ω 2 − a 2 − a 3 ω 2 + a 4 + a 5 ω 2 − a 6 − a 7 ω 2 f ( − ω 2 ) = a 0 − a 1 ω 2 − a 2 + a 3 ω 2 + a 4 − a 5 ω 2 − a 6 + a 7 ω 2 f ( ω ) = a 0 + a 1 ω + a 2 ω 2 + a 3 ω 3 − a 4 − a 5 ω − a 6 ω 2 − a 7 ω 3 f ( − ω ) = a 0 − a 1 ω + a 2 ω 2 − a 3 ω 3 − a 4 + a 5 ω − a 6 ω 2 + a 7 ω 3 f ( ω 3 ) = a 0 + a 1 ω 3 − a 2 ω 2 + a 3 ω − a 4 − a 5 ω 3 + a 6 ω 2 − a 7 ω f ( − ω 3 ) = a 0 − a 1 ω 3 − a 2 ω 2 − a 3 ω − a 4 + a 5 ω 3 + a 6 ω 2 + a 7 ω \begin{align*}
f(1) &= a_0 &+ a_1 &+ a_2 &+ a_3 &+ a_4 &+ a_5 &+ a_6 &+ a_7\\
f(-1) &= a_0 &- a_1 &+ a_2 &- a_3 &+ a_4 &- a_5 &+ a_6 &- a_7\\
f(\omega^2) &= a_0 &+ a_1\omega^2 &- a_2 &- a_3\omega^2 &+ a_4 &+ a_5\omega^2 &- a_6 &- a_7\omega^2\\
f(-\omega^2)&= a_0 &- a_1\omega^2 &- a_2 &+ a_3\omega^2 &+ a_4 &- a_5\omega^2 &- a_6 &+ a_7\omega^2\\
f(\omega) &= a_0 &+ a_1\omega &+ a_2\omega^2 &+ a_3\omega^3 &- a_4 &- a_5\omega &- a_6\omega^2 &- a_7\omega^3\\
f(-\omega) &= a_0 &- a_1\omega &+ a_2\omega^2 &- a_3\omega^3 &- a_4 &+ a_5\omega &- a_6\omega^2 &+ a_7\omega^3\\
f(\omega^3) &= a_0 &+ a_1\omega^3 &- a_2\omega^2 &+ a_3\omega &- a_4 &- a_5\omega^3 &+ a_6\omega^2 &- a_7\omega\\
f(-\omega^3)&= a_0 &- a_1\omega^3 &- a_2\omega^2 &- a_3\omega &- a_4 &+ a_5\omega^3 &+ a_6\omega^2 &+ a_7\omega
\end{align*} f ( 1 ) f ( − 1 ) f ( ω 2 ) f ( − ω 2 ) f ( ω ) f ( − ω ) f ( ω 3 ) f ( − ω 3 ) = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 + a 1 − a 1 + a 1 ω 2 − a 1 ω 2 + a 1 ω − a 1 ω + a 1 ω 3 − a 1 ω 3 + a 2 + a 2 − a 2 − a 2 + a 2 ω 2 + a 2 ω 2 − a 2 ω 2 − a 2 ω 2 + a 3 − a 3 − a 3 ω 2 + a 3 ω 2 + a 3 ω 3 − a 3 ω 3 + a 3 ω − a 3 ω + a 4 + a 4 + a 4 + a 4 − a 4 − a 4 − a 4 − a 4 + a 5 − a 5 + a 5 ω 2 − a 5 ω 2 − a 5 ω + a 5 ω − a 5 ω 3 + a 5 ω 3 + a 6 + a 6 − a 6 − a 6 − a 6 ω 2 − a 6 ω 2 + a 6 ω 2 + a 6 ω 2 + a 7 − a 7 − a 7 ω 2 + a 7 ω 2 − a 7 ω 3 + a 7 ω 3 − a 7 ω + a 7 ω
Ahora reorganicemos las evaluaciones para ir de f ( 1 ) f(1) f ( 1 ) , f ( ω ) f(\omega) f ( ω ) , … , f ( ω 7 ) f(\omega^7) f ( ω 7 )
f ( 1 ) = a 0 + a 1 + a 2 + a 3 + a 4 + a 5 + a 6 + a 7 f ( ω ) = a 0 + a 1 ω + a 2 ω 2 + a 3 ω 3 − a 4 − a 5 ω − a 6 ω 2 − a 7 ω 3 f ( ω 2 ) = a 0 + a 1 ω 2 − a 2 − a 3 ω 2 + a 4 + a 5 ω 2 − a 6 − a 7 ω 2 f ( ω 3 ) = a 0 + a 1 ω 3 − a 2 ω 2 + a 3 ω − a 4 − a 5 ω 3 + a 6 ω 2 − a 7 ω f ( − 1 ) = a 0 − a 1 + a 2 − a 3 + a 4 − a 5 + a 6 − a 7 f ( − ω ) = a 0 − a 1 ω + a 2 ω 2 − a 3 ω 3 − a 4 + a 5 ω − a 6 ω 2 + a 7 ω 3 f ( − ω 2 ) = a 0 − a 1 ω 2 − a 2 + a 3 ω 2 + a 4 − a 5 ω 2 − a 6 + a 7 ω 2 f ( − ω 3 ) = a 0 − a 1 ω 3 − a 2 ω 2 − a 3 ω − a 4 + a 5 ω 3 + a 6 ω 2 + a 7 ω \begin{align*}
f(1) &= a_0 &+ a_1 &+ a_2 &+ a_3 &+ a_4 &+ a_5 &+ a_6 &+ a_7\\
f(\omega) &= a_0 &+ a_1\omega &+ a_2\omega^2 &+ a_3\omega^3 &- a_4 &- a_5\omega &- a_6\omega^2 &- a_7\omega^3\\
f(\omega^2) &= a_0 &+ a_1\omega^2 &- a_2 &- a_3\omega^2 &+ a_4 &+ a_5\omega^2 &- a_6 &- a_7\omega^2\\
f(\omega^3) &= a_0 &+ a_1\omega^3 &- a_2\omega^2 &+ a_3\omega &- a_4 &- a_5\omega^3 &+ a_6\omega^2 &- a_7\omega\\
f(-1) &= a_0 &- a_1 &+ a_2 &- a_3 &+ a_4 &- a_5 &+ a_6 &- a_7\\
f(-\omega) &= a_0 &- a_1\omega &+ a_2\omega^2 &- a_3\omega^3 &- a_4 &+ a_5\omega &- a_6\omega^2 &+ a_7\omega^3\\
f(-\omega^2)&= a_0 &- a_1\omega^2 &- a_2 &+ a_3\omega^2 &+ a_4 &- a_5\omega^2 &- a_6 &+ a_7\omega^2\\
f(-\omega^3)&= a_0 &- a_1\omega^3 &- a_2\omega^2 &- a_3\omega &- a_4 &+ a_5\omega^3 &+ a_6\omega^2 &+ a_7\omega
\end{align*} f ( 1 ) f ( ω ) f ( ω 2 ) f ( ω 3 ) f ( − 1 ) f ( − ω ) f ( − ω 2 ) f ( − ω 3 ) = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 = a 0 + a 1 + a 1 ω + a 1 ω 2 + a 1 ω 3 − a 1 − a 1 ω − a 1 ω 2 − a 1 ω 3 + a 2 + a 2 ω 2 − a 2 − a 2 ω 2 + a 2 + a 2 ω 2 − a 2 − a 2 ω 2 + a 3 + a 3 ω 3 − a 3 ω 2 + a 3 ω − a 3 − a 3 ω 3 + a 3 ω 2 − a 3 ω + a 4 − a 4 + a 4 − a 4 + a 4 − a 4 + a 4 − a 4 + a 5 − a 5 ω + a 5 ω 2 − a 5 ω 3 − a 5 + a 5 ω − a 5 ω 2 + a 5 ω 3 + a 6 − a 6 ω 2 − a 6 + a 6 ω 2 + a 6 − a 6 ω 2 − a 6 + a 6 ω 2 + a 7 − a 7 ω 3 − a 7 ω 2 − a 7 ω − a 7 + a 7 ω 3 + a 7 ω 2 + a 7 ω
Si comparamos esto con la matriz de Vandermonde para las 8-vas raíces de la unidad, podemos ver que calculamos correctamente las potencias de ω \omega ω .
V = [ 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 − 1 − ω − ω 2 − ω 3 1 ω 2 − 1 − ω 2 1 ω 2 − 1 − ω 2 1 ω 3 − ω 2 ω − 1 − ω 3 ω 2 − ω 1 − 1 1 − 1 1 − 1 1 − 1 1 − ω ω 2 − ω 3 − 1 ω − ω 2 ω 3 1 − ω 2 − 1 ω 2 1 − ω 2 − 1 ω 2 1 − ω 3 − ω 2 − ω − 1 ω 3 ω 2 ω ] \mathbf{V} =\begin{bmatrix}
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\
1 & \omega & \omega^{2} & \omega^{3} & -1 & -\omega & -\omega^{2} & -\omega^{3} \\
1 & \omega^{2} & -1 & -\omega^{2} & 1 & \omega^{2} & -1 & -\omega^{2} \\
1 & \omega^{3} & -\omega^{2} & \omega & -1 & -\omega^{3} & \omega^{2} & -\omega \\
1 & -1 & 1 & -1 & 1 & -1 & 1 & -1 \\
1 & -\omega & \omega^{2} & -\omega^{3} & -1 & \omega & -\omega^{2} & \omega^{3} \\
1 & -\omega^{2} & -1 & \omega^{2} & 1 & -\omega^{2} & -1 & \omega^{2} \\
1 & -\omega^{3} & -\omega^{2} & -\omega & -1 & \omega^{3} & \omega^{2} & \omega
\end{bmatrix} V = 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 − 1 − ω − ω 2 − ω 3 1 ω 2 − 1 − ω 2 1 ω 2 − 1 − ω 2 1 ω 3 − ω 2 ω − 1 − ω 3 ω 2 − ω 1 − 1 1 − 1 1 − 1 1 − 1 1 − ω ω 2 − ω 3 − 1 ω − ω 2 ω 3 1 − ω 2 − 1 ω 2 1 − ω 2 − 1 ω 2 1 − ω 3 − ω 2 − ω − 1 ω 3 ω 2 ω
Cálculo de la matriz de Vandermonde
La matriz de Vandermonde anterior se derivó de la siguiente manera. Cada fila corresponde a las potencias de x x x para f ( x ) = a 0 + a 1 x + . . . + a 7 x 7 f(x)=a_0+a_1x+...+a_7x^7 f ( x ) = a 0 + a 1 x + ... + a 7 x 7 en x = { 1 , ω , ω 2 , . . . , ω 7 } x=\set{1,\omega,\omega^2,...,\omega^7} x = { 1 , ω , ω 2 , ... , ω 7 }
V = [ 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 ω 4 ω 5 ω 6 ω 7 1 ω 2 ω 4 ω 6 ω 8 ω 10 ω 12 ω 14 1 ω 3 ω 6 ω 9 ω 12 ω 15 ω 18 ω 21 1 ω 4 ω 8 ω 12 ω 16 ω 20 ω 24 ω 28 1 ω 5 ω 10 ω 15 ω 20 ω 25 ω 30 ω 35 1 ω 6 ω 12 ω 18 ω 24 ω 30 ω 36 ω 42 1 ω 7 ω 14 ω 21 ω 28 ω 35 ω 42 ω 49 ] \mathbf{V}=
\begin{bmatrix}
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\
1 & \omega & \omega^{2} & \omega^{3} & \omega^{4} & \omega^{5} & \omega^{6} & \omega^{7}\\
1 & \omega^{2} & \omega^{4} & \omega^{6} & \omega^{8} & \omega^{10} & \omega^{12} & \omega^{14}\\
1 & \omega^{3} & \omega^{6} & \omega^{9} & \omega^{12} & \omega^{15} & \omega^{18} & \omega^{21}\\
1 & \omega^{4} & \omega^{8} & \omega^{12} & \omega^{16} & \omega^{20} & \omega^{24} & \omega^{28}\\
1 & \omega^{5} & \omega^{10} & \omega^{15} & \omega^{20} & \omega^{25} & \omega^{30} & \omega^{35}\\
1 & \omega^{6} & \omega^{12} & \omega^{18} & \omega^{24} & \omega^{30} & \omega^{36} & \omega^{42}\\
1 & \omega^{7} & \omega^{14} & \omega^{21} & \omega^{28} & \omega^{35} & \omega^{42} & \omega^{49}
\end{bmatrix} V = 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 ω 4 ω 5 ω 6 ω 7 1 ω 2 ω 4 ω 6 ω 8 ω 10 ω 12 ω 14 1 ω 3 ω 6 ω 9 ω 12 ω 15 ω 18 ω 21 1 ω 4 ω 8 ω 12 ω 16 ω 20 ω 24 ω 28 1 ω 5 ω 10 ω 15 ω 20 ω 25 ω 30 ω 35 1 ω 6 ω 12 ω 18 ω 24 ω 30 ω 36 ω 42 1 ω 7 ω 14 ω 21 ω 28 ω 35 ω 42 ω 49
A continuación, factorizamos los múltiplos de 8:
V = [ 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 ω 4 ω 5 ω 6 ω 7 1 ω 2 ω 4 ω 6 ω 8 ω 8 ω 2 ω 8 ω 4 ω 8 ω 6 1 ω 3 ω 6 ω 8 ω ω 8 ω 4 ω 8 ω 7 ω 16 ω 2 ω 16 ω 5 1 ω 4 ω 8 ω 8 ω 4 ω 16 ω 16 ω 4 ω 24 ω 24 ω 4 1 ω 5 ω 8 ω 2 ω 8 ω 7 ω 16 ω 4 ω 24 ω ω 24 ω 6 ω 32 ω 3 1 ω 6 ω 8 ω 4 ω 16 ω 2 ω 24 ω 24 ω 6 ω 32 ω 4 ω 40 ω 2 1 ω 7 ω 8 ω 6 ω 16 ω 5 ω 24 ω 4 ω 32 ω 3 ω 40 ω 2 ω 48 ω ] \mathbf{V}=
\begin{bmatrix}
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\
1 & \omega & \omega^{2} & \omega^{3} & \omega^{4} & \omega^{5} & \omega^{6} & \omega^{7}\\
1 & \omega^{2} & \omega^{4} & \omega^{6} & \omega^{8} & \omega^{8}\omega^{2} & \omega^{8}\omega^{4} & \omega^{8}\omega^{6}\\
1 & \omega^{3} & \omega^{6} & \omega^{8}\omega & \omega^{8}\omega^{4} & \omega^{8}\omega^{7} & \omega^{16}\omega^{2} & \omega^{16}\omega^{5}\\
1 & \omega^{4} & \omega^{8} & \omega^{8}\omega^{4} & \omega^{16} & \omega^{16}\omega^{4} & \omega^{24} & \omega^{24}\omega^{4}\\
1 & \omega^{5} & \omega^{8}\omega^{2} & \omega^{8}\omega^{7} & \omega^{16}\omega^{4} & \omega^{24}\omega & \omega^{24}\omega^{6} & \omega^{32}\omega^{3}\\
1 & \omega^{6} & \omega^{8}\omega^{4} & \omega^{16}\omega^{2} & \omega^{24} & \omega^{24}\omega^{6} & \omega^{32}\omega^{4} & \omega^{40}\omega^{2}\\
1 & \omega^{7} & \omega^{8}\omega^{6} & \omega^{16}\omega^{5} & \omega^{24}\omega^{4} & \omega^{32}\omega^{3} & \omega^{40}\omega^{2} & \omega^{48}\omega\\
\end{bmatrix} V = 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 ω 4 ω 5 ω 6 ω 7 1 ω 2 ω 4 ω 6 ω 8 ω 8 ω 2 ω 8 ω 4 ω 8 ω 6 1 ω 3 ω 6 ω 8 ω ω 8 ω 4 ω 8 ω 7 ω 16 ω 2 ω 16 ω 5 1 ω 4 ω 8 ω 8 ω 4 ω 16 ω 16 ω 4 ω 24 ω 24 ω 4 1 ω 5 ω 8 ω 2 ω 8 ω 7 ω 16 ω 4 ω 24 ω ω 24 ω 6 ω 32 ω 3 1 ω 6 ω 8 ω 4 ω 16 ω 2 ω 24 ω 24 ω 6 ω 32 ω 4 ω 40 ω 2 1 ω 7 ω 8 ω 6 ω 16 ω 5 ω 24 ω 4 ω 32 ω 3 ω 40 ω 2 ω 48 ω
Eliminando los factores de 8 obtenemos:
V = [ 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 ω 4 ω 5 ω 6 ω 7 1 ω 2 ω 4 ω 6 1 ω 2 ω 4 ω 6 1 ω 3 ω 6 ω ω 4 ω 7 ω 2 ω 5 1 ω 4 1 ω 4 1 ω 4 1 ω 4 1 ω 5 ω 2 ω 7 ω 4 ω ω 6 ω 3 1 ω 6 ω 4 ω 2 1 ω 6 ω 4 ω 2 1 ω 7 ω 6 ω 5 ω 4 ω 3 ω 2 ω ] \mathbf{V} =
\begin{bmatrix}
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\
1 & \omega & \omega^{2} & \omega^{3} & \omega^{4} & \omega^{5} & \omega^{6} & \omega^{7}\\
1 & \omega^{2} & \omega^{4} & \omega^{6} & 1 & \omega^{2} & \omega^{4} & \omega^{6}\\
1 & \omega^{3} & \omega^{6} & \omega & \omega^{4} & \omega^{7} & \omega^{2} & \omega^{5}\\
1 & \omega^{4} & 1 & \omega^{4} & 1 & \omega^{4} & 1 & \omega^{4}\\
1 & \omega^{5} & \omega^{2} & \omega^{7} & \omega^{4} & \omega & \omega^{6} & \omega^{3}\\
1 & \omega^{6} & \omega^{4} & \omega^{2} & 1 & \omega^{6} & \omega^{4} & \omega^{2}\\
1 & \omega^{7} & \omega^{6} & \omega^{5} & \omega^{4} & \omega^{3} & \omega^{2} & \omega
\end{bmatrix} V = 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 ω 4 ω 5 ω 6 ω 7 1 ω 2 ω 4 ω 6 1 ω 2 ω 4 ω 6 1 ω 3 ω 6 ω ω 4 ω 7 ω 2 ω 5 1 ω 4 1 ω 4 1 ω 4 1 ω 4 1 ω 5 ω 2 ω 7 ω 4 ω ω 6 ω 3 1 ω 6 ω 4 ω 2 1 ω 6 ω 4 ω 2 1 ω 7 ω 6 ω 5 ω 4 ω 3 ω 2 ω
Después de reemplazar ω 4 = − 1 \omega^4=-1 ω 4 = − 1 , ω 5 = − ω \omega^5=-\omega ω 5 = − ω , ω 6 = − ω 2 \omega^6=-\omega^2 ω 6 = − ω 2 , ω 7 = − ω 3 \omega^7=-\omega^3 ω 7 = − ω 3 obtenemos la matriz de Vandermonde original:
V = [ 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 − 1 − ω − ω 2 − ω 3 1 ω 2 − 1 − ω 2 1 ω 2 − 1 − ω 2 1 ω 3 − ω 2 ω − 1 − ω 3 ω 2 − ω 1 − 1 1 − 1 1 − 1 1 − 1 1 − ω ω 2 − ω 3 − 1 ω − ω 2 ω 3 1 − ω 2 − 1 ω 2 1 − ω 2 − 1 ω 2 1 − ω 3 − ω 2 − ω − 1 ω 3 ω 2 ω ] \mathbf{V} =\begin{bmatrix}
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\
1 & \omega & \omega^{2} & \omega^{3} & -1 & -\omega & -\omega^{2} & -\omega^{3} \\
1 & \omega^{2} & -1 & -\omega^{2} & 1 & \omega^{2} & -1 & -\omega^{2} \\
1 & \omega^{3} & -\omega^{2} & \omega & -1 & -\omega^{3} & \omega^{2} & -\omega \\
1 & -1 & 1 & -1 & 1 & -1 & 1 & -1 \\
1 & -\omega & \omega^{2} & -\omega^{3} & -1 & \omega & -\omega^{2} & \omega^{3} \\
1 & -\omega^{2} & -1 & \omega^{2} & 1 & -\omega^{2} & -1 & \omega^{2} \\
1 & -\omega^{3} & -\omega^{2} & -\omega & -1 & \omega^{3} & \omega^{2} & \omega
\end{bmatrix} V = 1 1 1 1 1 1 1 1 1 ω ω 2 ω 3 − 1 − ω − ω 2 − ω 3 1 ω 2 − 1 − ω 2 1 ω 2 − 1 − ω 2 1 ω 3 − ω 2 ω − 1 − ω 3 ω 2 − ω 1 − 1 1 − 1 1 − 1 1 − 1 1 − ω ω 2 − ω 3 − 1 ω − ω 2 ω 3 1 − ω 2 − 1 ω 2 1 − ω 2 − 1 ω 2 1 − ω 3 − ω 2 − ω − 1 ω 3 ω 2 ω
Ejercicio: Evalúe f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + a 4 x 4 + a 5 x 5 + a 6 x 6 f(x)=a_0+a_1x+a_2x^2+a_3x^3+a_4x^4+a_5x^5+a_6x^6 f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + a 4 x 4 + a 5 x 5 + a 6 x 6 en las 8-vas raíces de la unidad. De nuevo, tenga en cuenta que puede asignar a 7 = 0 a_7=0 a 7 = 0 .
Ejercicio: Evalúe f ( x ) = 3 + 2 x + 9 x 2 + x 3 f(x)=3 +2x+9x^2+x^3 f ( x ) = 3 + 2 x + 9 x 2 + x 3 en las 4-tas raíces de la unidad en F q \mathbb{F}_q F q donde q = 17 q=17 q = 17 . Utilice Python para encontrar una 4-ta raíz primitiva de la unidad como punto de partida.
Resumen
La evaluación de un polinomio en las k k k -ésimas raíces de la unidad mediante la expansión de raíz cuadrada obtiene las mismas evaluaciones que al evaluar el polinomio en las raíces de la unidad una por una. Esto se cumple debido al Teorema de Preservación de la Imagen para Funciones Multivaluadas, ya que simplemente estamos evaluando la función multivaluada en el dominio { 1 } \set{1} { 1 } .
Este método ahorra costos de computación porque, en cada paso, la mitad de las raíces cuadradas son evaluadas y multiplicadas por el coeficiente o la suma de coeficientes con los que están emparejadas. Para el resto de las evaluaciones, los resultados simplemente se copian en lugar de ser reevaluados.