数论变换Number Theoretic Transform(NTT)

数论变换是用来干什么的?

数论变换是用来快速高效地计算系数为 Z q Z_q Zq多项式环乘法运算结果的一个算法。

多项式定义

f ( x ) = ∑ i = 0 n a i x i f(x)=\sum_{i=0}^{n}a_ix^i f(x)=i=0naixi

  1. 多项式的根: f ( x 0 ) = 0 f(x_0)=0 f(x0)=0, x 0 x_0 x0为多项式的根
  2. a n ≠ 0 , d e g ( f ) = n a_n \neq 0, deg(f) =n an=0,deg(f)=n

多项式乘法

f ( x ) = ∑ i = 0 n a i x i f(x)=\sum_{i=0}^{n}a_ix^i f(x)=i=0naixi g ( x ) = ∑ j = 0 n a j y j g(x)=\sum_{j=0}^{n}a_jy^j g(x)=j=0najyj
f ( x ) ⋅ g ( x ) = ∑ i = 0 n + m C t x t f(x)\cdot g(x)=\sum_{i=0}^{n+m}C_tx^t f(x)g(x)=i=0n+mCtxt
其中 C t = ∑ i + j = t a i b j C_t=\sum_{i+j=t}a_ib_j Ct=i+j=taibj
并且满足 d e g ( f ) > = d e g ( g ) , f ( x ) ≠ 0 deg(f)>=deg(g), f(x)\neq0 deg(f)>=deg(g),f(x)=0
多项式 f f f g g g的乘积 h h h称为 f f f g g g的折叠卷积

群的定义

带有二元运算的集合G(以下默认集合非空)
满足以下条件:
1、结合律
2、存在零元
3、有可逆元

Abel群

在以上定义的基础上还满足交换律
a + b = b + a a+b=b+a a+b=b+a

环的定义

对集合 R R R,现在有两种运算, + + + ⋅ \cdot ,满足
1、在 + + +(加法)下成Abel群
2、 a ⋅ ( b ⋅ c ) = ( a ⋅ b ) ⋅ c a \cdot (b \cdot c)=(a \cdot b) \cdot c a(bc)=(ab)c(结合律)
3、 ( a + b ) ⋅ c = a c + b c (a+b)\cdot c = ac + bc (a+b)c=ac+bc(分配率)
则称集合 R R R为环

多项式环、多项式商环

多项式环就是多项式系数在环上。多项式商环就是多项式环模了一个多项式

多项式商环下的乘法

现在存在一个多项式环 Z q [ x ] / ( x n + 1 ) , n = 2 m \mathbb{Z}_{q}[x]/(x^n+1),n=2^m Zq[x]/(xn+1),n=2m n n n是2的某次幂), q q q是素数,并且满足 2 n ∣ ( q − 1 ) 2n|(q-1) 2n(q1)
其中 f , g f,g f,g都是是属于多项式环的,需要计算多项式环 f , g f,g f,g的乘积:
f , g ∈ Z q / ( x n + 1 ) h = f ⋅ g ∈ Z q / ( x n + 1 ) f = ( f 0 , f 1 , f 2 , . . . , f n − 1 ) g = ( g 0 , g 1 , g 2 , . . . , g n − 1 ) f,g \in \mathbb{Z}_{q} /( x^n +1) \\ h=f\cdot g \in \mathbb{Z}_{q}/(x^n+1) \\ f=(f_0,f_1,f_2,...,f_{n-1}) \\ g=(g_0,g_1,g_2,...,g_{n-1}) \\ f,gZq/(xn+1)h=fgZq/(xn+1)f=(f0,f1,f2,...,fn1)g=(g0,g1,g2,...,gn1)
1、令 h ˉ = f ⋅ g ∈ Z q [ x ] \bar{h}=f \cdot g \in \mathbb{Z}_{q}[x] hˉ=fgZq[x](也就是传统多项式乘法)
h ˉ = ( h 0 ˉ , h 1 ˉ , h 2 ˉ , . . . , h n − 1 ˉ , h n ˉ , . . . , h 2 n − 2 ˉ ) \bar{h}=(\bar{h_0},\bar{h_1},\bar{h_2},...,\bar{h_{n-1}},\bar{h_n},...,\bar{h_{2n-2}}) hˉ=(h0ˉ,h1ˉ,h2ˉ,...,hn1ˉ,hnˉ,...,h2n2ˉ)
2、 h = h ˉ m o d ( x n + 1 ) h=\bar{h} mod (x^n +1) h=hˉmod(xn+1) x n = − 1 x^n=-1 xn=1
则可以得到:
h = ( h 0 ˉ − h n ˉ , h 1 ˉ − h n + 1 ˉ , . . . , h n + 2 ˉ − h 2 n − 2 ˉ , h n − 1 ˉ ) h=(\bar{h_0}-\bar{h_n},\bar{h_1}-\bar{h_{n+1}},...,\bar{h_{n+2}}-\bar{h_{2n-2}},\bar{h_{n-1}}) h=(h0ˉhnˉ,h1ˉhn+1ˉ,...,hn+2ˉh2n2ˉ,hn1ˉ)
具体推导过程如下:
在这里插入图片描述
根据上文提到的多项式乘法结果,我们可以把其中的 h ˉ \bar{h} hˉ做一个替换,可以得到如下结果
在这里插入图片描述
h h h f f f g g g的负折叠卷积。

傅里叶变换

  • 连续 F ( ω ) = F [ f ( t ) ] = ∫ − ∞ ∞ f ( t ) e − i w t d t F(\omega)=\mathcal{F}[f(t)]=\int_{-\infty}^{\infty} f(t) e^{-i w t} d t F(ω)=F[f(t)]=f(t)eiwtdt
    f ( t ) = F − 1 [ F ( w ) ] = 1 2 π ∫ − ∞ ∞ F ( w ) e − i w t d w f(t)=\mathcal{F}^{-1}[F(w)]=\frac{1}{2\pi}\int_{-\infty}^{\infty}F(w)e^{-i w t}dw f(t)=F1[F(w)]=2π1F(w)eiwtdw

  • 离散DFT(作用在复数域 C \mathbb{C} C上)
    ( x 0 , x 1 , . . . x n − 1 ) < = > ( x 0 , x 1 , . . . , x N − 1 ) ∈ C (x_0,x_1,...x_{n-1})<=>(x_0,x_1,...,x_{N-1}) \in \mathbb{C} (x0,x1,...xn1)<=>(x0,x1,...,xN1)C
    x j = ∑ k = 0 n − 1 x k w k j j = 0 , 1 , … , n − 1 x k = ∑ j = 0 n − 1 x j w − k j k = 0 , 1 , … , N − 1 x_j=\sum_{k=0}^{n-1} x_k w^{kj} \quad j=0,1, \ldots, n-1 \\ x_k=\sum_{j=0}^{n-1} x_j w^{-kj} \quad k=0,1, \ldots, N-1 xj=k=0n1xkwkjj=0,1,,n1xk=j=0n1xjwkjk=0,1,,N1
    其中 w = e − 2 π i N w=e^{-\frac{2\pi i}{N}} w=eN2πi,N次单位根, X N = 1 X^N=1 XN=1称为N长DFT
    x ⃗ = ( x 0 , . . . . , x N − 1 ) , X ⃗ = ( X 0 , X 1 , . . . . , X n − 1 ) \vec{x}=(x_0,....,x_{N-1}),\vec{X}=(X_0,X_1,....,X_{n-1}) x =(x0,....,xN1),X =(X0,X1,....,Xn1)
    X ⃗ = D F T ( x ⃗ ) , x ⃗ = D F T − 1 ( X ⃗ ) \vec{X}=DFT(\vec{x}),\vec{x}=DFT^{-1}(\vec{X}) X =DFT(x ),x =DFT1(X )
    离散傅里叶变换的两条性质:
    1、 X ⃗ = D F T − 1 ( D F T ( x ⃗ ) ) \vec{X}=DFT^{-1}(DFT(\vec{x})) X =DFT1(DFT(x ))
    2、循环卷积性质
    x ⃗ = ( x 0 , x 1 , . . . , x N − 1 ) y ⃗ = ( y 0 , y 1 , . . . , y N − 1 ) \vec{x} =(x_0,x_1,...,x_{N-1}) \\ \vec{y} =(y_0,y_1,...,y_{N-1}) x =(x0,x1,...,xN1)y =(y0,y1,...,yN1)
    实在码不动公式了所以看图吧
    在这里插入图片描述

数论变换NTT(有限域上的离散傅里叶变换)

f ~ = ( f 0 ~ , f 1 ~ , f 2 ~ , . . . , f N − 1 ~ ) ⇔ t r a n s f o r m f ^ = ( f 0 ^ , f 1 ^ , . . . , f N − 1 ^ ) ( f i ~ , f i ^ ∈ Z q ) { f j ^ = ∑ i = 0 N − 1 f i ~ r i j , j = 0 , 1 , . . . , N − 1 f i ~ = 1 N ∑ j = 0 N − 1 f j ^ r i j , i = 0 , 1 , . . . , N − 1 { f ^ = N T T ( f ~ ) f ~ = N T T − 1 ( f ^ ) \widetilde{f}=(\widetilde{f_0},\widetilde{f_1},\widetilde{f_2},...,\widetilde{f_{N-1}})\stackrel{transform}\Leftrightarrow \hat{f}=(\hat{f_0},\hat{f_1},...,\hat{f_{N-1}}) (\widetilde{f_i},\hat{f_i} \in \mathbb{Z_q})\\ \left\{\begin{array}{lr} \hat{f_j}=\sum\limits_{i=0}^{N-1}\widetilde{f_i}r^{ij},j=0,1,...,N-1 \\ \widetilde{f_i}=\frac{1}{N}\sum\limits_{j=0}^{N-1}\hat{f_j}r^{ij},i=0,1,...,N-1 \\ \end{array}\right. \\ \left\{\begin{array}{lr} \hat{f}=NTT(\widetilde{f})\\ \widetilde{f}=NTT^{-1}(\hat{f}) \\ \end{array}\right. f =(f0 ,f1 ,f2 ,...,fN1 )transformf^=(f0^,f1^,...,fN1^(fi ,fi^Zq)fj^=i=0N1fi rij,j=0,1,...,N1fi =N1j=0N1fj^rij,i=0,1,...,N1{f^=NTT(f )f =NTT1(f^)
其中 r r r Z q \mathbb{Z_q} Zq中的 N N N阶本原单位根,并称此变换为 N N N N T T NTT NTT r r r N N N阶本原单位根, w w w 2 N 2N 2N阶本原单位根,因此 r = w 2 r=w^2 r=w2

N阶本原单位根
r ∈ Z q , r N ≡ 1 m o d q , r k ≢ m o d q , 0 < k < N r\in \mathbb{Z_q}, r^N \equiv 1 mod q, r^k \not\equiv mod q,0<k<N rZq,rN1modq,rkmodq,0<k<N(小于 N N N的非零幂模 q q q不为1)

  1. f ~ = N T T − 1 ( N T T ( f ~ ) ) \widetilde{f}=NTT^{-1}(NTT(\widetilde{f})) f =NTT1(NTT(f ))
  2. 如果 h ~ \widetilde{h} h f ~ \widetilde{f} f g ~ \widetilde{g} g 的循环卷积,则
    N T T ( f ~ ) ∘ N T T ( g ~ ) = N T T ( h ~ ) NTT(\widetilde{f}) \circ NTT(\widetilde{g})=NTT(\widetilde{h}) NTT(f )NTT(g )=NTT(h )

如何利用N长NTT计算多项式乘法 h = f ⋅ g ∈ Z q [ x ] / ( x n + 1 ) h=f \cdot g \in \mathbb{Z_q}[x]/(x^n+1) h=fgZq[x]/(xn+1)?

现在我们已经有:(懒得打公式+1)
在这里插入图片描述
在这里插入图片描述

负折叠卷积下的NTT和循环卷积下的NTT

上面的推导过程是为了验证这样的一个结论:

就是对多项式 f f f负折叠卷积下的NTT等于对多项式 f f f做一个点乘向量 ( 1 , w , w 2 , w 3 , . . . , w n − 1 ) (1,w,w^2,w^3,...,w^{n-1}) (1,w,w2,w3,...,wn1)得到的结果折叠卷积下的NTT(逆NTT则是点乘向量 ( 1 , w − 1 , w − 2 , . . , w − ( n − 1 ) ) (1,w^{-1},w^{-2},..,w^{-(n-1)}) (1,w1,w2,..,w(n1))

用公式表示则如下:
f ^ = N T T ^ ( f ) = N T T ( ( 1 , w , w 2 , w 3 , . . . , w n − 1 ) ∘ f ) f = N T T − 1 ^ ( f ^ ) = ( 1 , w − 1 , . . . , w − ( n − 1 ) ) ∘ N T T − 1 ( f ^ ) \hat{f}=\hat{NTT}(f)=NTT((1,w,w^2,w^3,...,w^{n-1}) \circ f) \\ f=\hat{NTT^{-1}}(\hat{f})=(1,w^{-1},...,w^{-(n-1)}) \circ NTT^{-1}(\hat{f}) f^=NTT^(f)=NTT((1,w,w2,w3,...,wn1)f)f=NTT1^(f^)=(1,w1,...,w(n1))NTT1(f^)
f ~ = ( 1 , w , . . . , w n − 1 ) ∘ f , f i ~ = w i f i \widetilde{f}=(1,w,...,w^{n-1}) \circ f, \widetilde{f_i}=w^if_i f =(1,w,...,wn1)f,fi =wifi.
则由数论变换NTT可得:
f j ^ = ∑ i = 0 n − 1 r i j ⋅ f i ~ = ∑ i = 0 n − 1 ( w 2 ) i j w i f i = ∑ i = 0 n − 1 ( w ) ( 2 j + 1 ) ⋅ i f i = f ( w 2 j + 1 ) \hat{f_j}=\sum\limits_{i=0}^{n-1} r^{ij} \cdot \widetilde{f_i} =\sum\limits_{i=0}^{n-1}(w^2)^{ij}w^if_i = \sum\limits_{i=0}^{n-1}(w)^{(2j+1) \cdot i }f_i = f(w^{2j+1}) fj^=i=0n1rijfi =i=0n1(w2)ijwifi=i=0n1(w)(2j+1)ifi=f(w2j+1)
以上 N T T ^ \hat{NTT} NTT^就是负折叠卷积下的数论变换, N T T NTT NTT算子就是循环卷积下的数论变换(也是我们上文提到的)。我们已知循环卷积下的数论变换,要求负折叠卷积下的数论变换,可以用如上的方式求得。

还有一种方法求负折叠卷积下的数论变换是通过FFT-Trick的方式计算,在本博主另外一篇博文中可以看到FFT-trick及Culey-Tukey蝴蝶变换原理及实现

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值