Como vimos en el artículo anterior, la Inverse Number Theoretic Transform (INTT) se realiza utilizando una matriz de Vandermonde, al igual que la NTT. Esto demuestra que tanto la evaluación a través de la NTT como la interpolación a través de la INTT son operaciones similares.
El problema de usar directamente la matriz de Vandermonde para la evaluación o interpolación es que multiplicar una matriz k×k por un vector toma un tiempo O(k2). Afortunadamente, al usar las k-ésimas raíces de la unidad, con k siendo una potencia de 2, se puede usar un método rápido que no depende de la multiplicación de matrices, reduciendo la complejidad temporal a O(klogk).
El método rápido para la NTT se introdujo en el capítulo “NTT Algorithm by Hand.” En este capítulo, estudiaremos el método rápido para la INTT.
La idea es simple: interpretar la interpolación polinómica como una evaluación, permitiendo el uso del mismo método empleado para la NTT.
Evaluación e interpolación
Como repaso, la NTT nos permite transformar un polinomio de grado como máximo k−1 desde su forma de coeficientes,
a0a1...ak−1
a su forma de punto-valor,
f(ω0)f(ω1)...f(ωk−1)
evaluando el polinomio en las k-ésimas raíces de la unidad. A esto se le llama evaluación.
La interpolación es lo opuesto a la evaluación: es el proceso de transformar un polinomio desde su forma de punto-valor a su forma de coeficientes.
La interpolación como evaluación
Las evaluaciones e interpolaciones en las k-ésimas raíces de la unidad son operaciones similares porque ambas se realizan utilizando una matriz de Vandermonde.
Para una mejor visualización, consideremos un polinomio de grado como máximo 3,
Inspirados en la estructura de evaluación, podemos ver 4f(1),4f(ω),4f(ω2) y 4f(ω3) como los coeficientes de un nuevo polinomio f~(x), definido como
f~(x)=41(f(1)+f(ω)x+f(ω2)x2+f(ω3)x3).
En estos términos, los coeficientes a,b,c y d son las evaluaciones de f~(x) en los siguientes puntos:
abcd=f~(1)=f~(ω−1)=f~(ω−2)=f~(ω−3)
Por lo tanto, podemos interpretar la interpolación como la evaluación de otro polinomio. La observación crucial es que la NTT inversa (INTT) no requiere un algoritmo fundamentalmente distinto.
Una vez que la representación de punto-valor se reinterpreta como el vector de coeficientes de un nuevo polinomio, la interpolación se convierte en una evaluación en un conjunto permutado de raíces de la unidad. En este sentido, la evaluación y la interpolación son la misma operación.
Evitando trabajar con las inversas de las raíces de la unidad
Un polinomio de grado como máximo k−1, donde k es una potencia de 2, puede evaluarse en las k-ésimas raíces de la unidad usando el método rápido explicado en el capítulo NTT Algorithm by Hand.
Las evaluaciones de
f~(x)=41(f(1)+f(ω)x+f(ω2)x2+f(ω3)x3)
en los puntos f~(1),f~(−1),f~(ω) y f~(−ω) se ilustran a continuación.
La idea es agrupar las potencias pares e impares como
f~(x)=41(f(1)+f(ω2)x2)+x(f(ω)+f(ω3)x2)),
y evaluar f~(x) en 1. En cada evaluación de una raíz cuadrada interna, la expresión se ramifica en dos, una por cada valor de la raíz cuadrada. Esto continúa hasta que no queden raíces cuadradas, punto en el cual el procedimiento termina.