参考文献:
插值任务:
已知函数 f : D → R f:D \to R f:D→R 的若干相异数据点 ( x i , y i ) , i = 0 , 1 , 2 , ⋯ , n (x_i,y_i),i=0,1,2,\cdots,n (xi,yi),i=0,1,2,⋯,n,共有 n + 1 n+1 n+1 个点
计算某个 n n n 次多项式 P ( x ) ∈ F [ x ] P(x) \in \mathbb F[x] P(x)∈F[x],使得误差 R n ( x ) = f ( x ) − P ( x ) R_n(x)=f(x)-P(x) Rn(x)=f(x)−P(x) 尽可能的小
我们定义多项式 w k ( x ) w_{k}(x) wk(x),
w 0 = 1 , w k ( x ) = ∏ i = 0 k − 1 ( x − x j ) , k = 1 , 2 , ⋯ , n + 1 w_0=1,\,\, w_{k}(x)=\prod_{i=0}^{k-1}(x-x_j), k=1,2,\cdots,n+1 w0=1,wk(x)=i=0∏k−1(x−xj),k=1,2,⋯,n+1
插值多项式的次数不是越高越好,会出现 “龙格现象”:插值区间边缘的误差极大。
基函数:
B i ( x ) = ∏ j ≠ i ( x − x j ) ⋅ ( x i − x j ) − 1 , ∀ i = 0 , 1 , ⋯ , n B_i(x) = \prod_{j \neq i} (x-x_j)\cdot(x_i-x_j)^{-1},\,\, \forall i=0,1,\cdots,n Bi(x)=j=i∏(x−xj)⋅(xi−xj)−1,∀i=0,1,⋯,n
插值结果:
P n ( x ) = ∑ i = 0 n y i ⋅ B i ( x ) P_n(x) = \sum_{i=0}^n y_i \cdot B_i(x) Pn(x)=i=0∑nyi⋅Bi(x)
易知 f ( x i ) = P n ( x i ) , ∀ x i f(x_i)=P_n(x_i), \forall x_i f(xi)=Pn(xi),∀xi,它恰好穿过了 n + 1 n+1 n+1 个数据点。
插值余项:
R n ( x ) = f ( x ) − P n ( x ) = f ( n + 1 ) ( ξ ) ( n + 1 ) ! ⋅ w n + 1 ( x ) , ∃ ξ ∈ D R_n(x) = f(x)-P_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\cdot w_{n+1}(x),\exist \xi \in D Rn(x)=f(x)−Pn(x)=(n+1)!f(n+1)(ξ)⋅wn+1(x),∃ξ∈D
缺点:每当数据点增减,基函数 B i ( x ) B_i(x) Bi(x) 都会变化,因此 P ( x ) P(x) P(x) 需要完全重新计算;容易出现龙格现象。
差商(均差)多项式,
f [ x i ] = y i f [ x i , x j ] = ( f [ x i ] − f [ x j ] ) ⋅ ( x i − x j ) − 1 f [ x i , x j , x k ] = ( f [ x i , x j ] − f [ x j , x k ] ) ⋅ ( x i − x k ) − 1 ⋯ f [ x i , x j , ⋯ , x p , x q ] = ( f [ x i , x j , ⋯ , x p ] − f [ x i , ⋯ , x p , x q ] ) ⋅ ( x 0 − x q ) − 1 \begin{aligned} f[x_i] &= y_i\\ f[x_i,x_j] &= (f[x_i]-f[x_j]) \cdot (x_i-x_j)^{-1}\\ f[x_i,x_j,x_k] &= (f[x_i,x_j] - f[x_j,x_k]) \cdot (x_i-x_k)^{-1}\\ &\cdots\\ f[x_i,x_j,\cdots,x_p,x_q] &= (f[x_i,x_j,\cdots,x_p] - f[x_i,\cdots,x_p,x_q]) \cdot (x_0-x_q)^{-1} \end{aligned} f[xi]f[xi,xj]f[xi,xj,xk]f[xi,xj,⋯,xp,xq]=yi=(f[xi]−f[xj])⋅(xi−xj)−1=(f[xi,xj]−f[xj,xk])⋅(xi−xk)−1⋯=(f[xi,xj,⋯,xp]−f[xi,⋯,xp,xq])⋅(x0−xq)−1
基函数:
B i ( x ) = w i ( x ) , ∀ i = 0 , 1 , ⋯ , n B_i(x) = w_i(x),\,\, \forall i=0,1,\cdots,n Bi(x)=wi(x),∀i=0,1,⋯,n
插值结果:
P n ( x ) = ∑ i = 0 n f [ x 0 , ⋯ , x i ] ⋅ B i ( x ) P_n(x) = \sum_{i=0}^{n} f[x_0,\cdots,x_i] \cdot B_i(x) Pn(x)=i=0∑nf[x0,⋯,xi]⋅Bi(x)
易知 f ( x i ) = P n ( x i ) , ∀ x i f(x_i)=P_n(x_i), \forall x_i f(xi)=Pn(xi),∀xi,它恰好穿过了 n + 1 n+1 n+1 个数据点。
插值余项:
R n ( x ) = f [ x 0 , ⋯ , x n ] ⋅ w n + 1 ( x ) = f ( n + 1 ) ( ξ ) ( n + 1 ) ! ⋅ w n + 1 ( x ) , ∃ ξ ∈ D R_n(x) = f[x_0,\cdots,x_n] \cdot w_{n+1}(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\cdot w_{n+1}(x),\exist \xi \in D Rn(x)=f[x0,⋯,xn]⋅wn+1(x)=(n+1)!f(n+1)(ξ)⋅wn+1(x),∃ξ∈D
优点:增删数据点的时候,系数(均差)不需要全部重新计算
缺点:依旧容易出现龙格现象
请读者注意,此部分内容来自多个网页信源,并且它们给出的公式并不统一(看晕了,迷惑)。此部分的某些公式可能是错误的。
局限在区间 [ − 1 , 1 ] [-1,1] [−1,1] 上(区间总是可以缩放的),切比雪夫多项式:
T 0 ( x ) = 1 T 1 ( x ) = x T 2 ( X ) = 2 x 2 − 1 ⋯ T n ( x ) = 2 x ⋅ g n ( x ) − g n − 1 ( x ) \begin{aligned} T_0(x) &= 1\\ T_1(x) &= x\\ T_2(X) &= 2x^2-1\\ &\cdots\\ T_{n}(x) &= 2x\cdot g_n(x) - g_{n-1}(x) \end{aligned} T0(x)T1(x)T2(X)Tn(x)=1=x=2x2−1⋯=2x⋅gn(x)−gn−1(x)
可以证明, T n ( x ) T_n(x) Tn(x) 满足:
另外它们是正交的,可以作为基函数,
∫ − 1 1 T i ( x ) T j ( x ) d x 1 − x 2 = { 0 , i ≠ j π , i = j = 0 π 2 , i = j > 0 \int_{-1}^{1} T_i(x)T_j(x)\frac{\mathrm dx}{\sqrt{1-x^2}} = \left\{\begin{aligned} 0,&& i \neq j\\ \pi,&& i=j=0\\ \frac{\pi}{2}, && i=j>0 \end{aligned}\right. ∫−11Ti(x)Tj(x)1−x2dx=⎩ ⎨ ⎧0,π,2π,i=ji=j=0i=j>0
区间 [ − 1 , 1 ] [-1,1] [−1,1] 上的 Lipschitz continuous 函数 f f f(满足 ∣ f ( x ) − f ( y ) ∣ ≤ κ ⋅ ∣ x − y ∣ , ∀ x , y ∈ [ − 1 , 1 ] |f(x)-f(y)| \le \kappa \cdot|x-y|,\forall x,y \in [-1,1] ∣f(x)−f(y)∣≤κ⋅∣x−y∣,∀x,y∈[−1,1]),总是存在唯一的的多项式 P n ( x ) , deg P n ≤ n P_n(x), \deg P_n\le n Pn(x),degPn≤n(称为 Chebyshev Interpolant),对于 Chebyshev points { x j } \{x_j\} {xj} 总满足 P n ( x j ) = f ( x j ) P_n(x_j)=f(x_j) Pn(xj)=f(xj),
一般来说,等距点的插值性质很差,但是 Chebyshev points(视为单位圆上等距的单位根)的插值效果相当好,每个点到其他所有点的平均距离都接近 1 / 2 1/2 1/2,这些点使得余项 R n ( x ) R_n(x) Rn(x) 最小化。切比雪夫插值可以抑制龙格现象。
插值结果 P n ( x ) P_n(x) Pn(x) 可以写成以 T i ( x ) T_i(x) Ti(x) 为基函数的形式:
P n ( x ) = ∑ i = 0 n c i ⋅ T i ( x ) P_n(x) = \sum_{i=0}^{n} c_i \cdot T_i(x) Pn(x)=i=0∑nci⋅Ti(x)
问题是,先计算 Lagrange/Newton 插值,然后再把系数转换为上述的系数,应该会有很大的数值误差。怎么直接计算这些 c i c_i ci 系数呢?
切比雪夫级数(Chebyshev series):任意的区间 [ − 1 , 1 ] [-1,1] [−1,1] 上的 Lipschitz continuous 函数 f f f,总可以唯一地表示为如下形式
f ( x ) = ∑ i = 0 ∞ a i ⋅ T i ( x ) f(x) = \sum_{i=0}^{\infty} a_i \cdot T_i(x) f(x)=i=0∑∞ai⋅Ti(x)
这个级数绝对收敛、一致收敛(absolutely and uniformly convergent),其中的系数计算公式为:
a 0 = 1 π ∫ − 1 1 f ( x ) 1 − x 2 d x a i = 2 π ∫ − 1 1 f ( x ) T i ( x ) 1 − x 2 d x , ∀ i = 1 , ⋯ , n \begin{aligned} a_0 &= \frac{1}{\pi} \int_{-1}^{1} \frac{f(x)}{\sqrt{1-x^2}} \mathrm{d} x\\ a_i &= \frac{2}{\pi} \int_{-1}^{1} \frac{f(x)T_i(x)}{\sqrt{1-x^2}} \mathrm{d} x, \forall i = 1,\cdots,n \end{aligned} a0ai=π1∫−111−x2f(x)dx=π2∫−111−x2f(x)Ti(x)dx,∀i=1,⋯,n
上述级数的截断/投影(truncation or projection),
f n ( x ) = ∑ i = 0 n a i ⋅ T i ( x ) f_n(x) = \sum_{i=0}^{n} a_i \cdot T_i(x) fn(x)=i=0∑nai⋅Ti(x)
插值多项式 P n ( x ) P_n(x) Pn(x) 是级数投影 f n ( x ) f_n(x) fn(x) 的良好近似,并且 P n ( x ) P_n(x) Pn(x) 不需要计算积分,实现简单。它们的系数关系是:
c 0 = a 0 + a 2 n + a 4 n + ⋯ c n = a n + a 3 n + a 5 n + ⋯ c k = a k + ( a 2 n + k + a 4 n + k + ⋯ ) + ( a 2 n − k + a 4 n − k + ⋯ ) , ∀ 1 ≤ k ≤ n − 1 \begin{aligned} c_0 &= a_0+a_{2n}+a_{4n}+\cdots\\ c_n &= a_n+a_{3n}+a_{5n}+\cdots\\ c_k &= a_k+(a_{2n+k}+a_{4n+k}+\cdots)+(a_{2n-k}+a_{4n-k}+\cdots),\forall 1\le k\le n-1 \end{aligned} c0cnck=a0+a2n+a4n+⋯=an+a3n+a5n+⋯=ak+(a2n+k+a4n+k+⋯)+(a2n−k+a4n−k+⋯),∀1≤k≤n−1
因此切比雪夫插值 P n ( x ) P_n(x) Pn(x) 的系数,可以视为切比雪夫级数 f f f 的系数重新分配。两种近似方法 P n ( x ) P_n(x) Pn(x) 和 f n ( x ) f_n(x) fn(x),二者的精度差距一般在因子 2 2 2 以内。
对于离散情况,关于 Chebyshev points 也存在正交性:
∑ k = 0 n T i ( x k ) T j ( x k ) = { 0 , i ≠ j n + 1 , i = j = 0 n + 1 2 , 0 < i = j \sum_{k=0}^{n} T_i(x_k)T_j(x_k) = \left\{\begin{aligned} 0,&& i \neq j\\ n+1,&& i=j=0\\ \frac{n+1}{2}, && 0k=0∑nTi(xk)Tj(xk)=⎩ ⎨ ⎧0,n+1,2n+1,i=ji=j=00<i=j
根据上述的正交性,我们采样 Chebyshev points 数据点 ( x k , y k = f ( x k ) ) (x_k,y_k=f(x_k)) (xk,yk=f(xk)),计算系数:
c 0 = 1 n + 1 ∑ k = 0 n y k c i = 2 n + 1 ∑ k = 0 n y k T i ( x k ) , ∀ i = 1 , ⋯ , n \begin{aligned} c_0 &= \frac{1}{n+1} \sum_{k=0}^{n} y_k\\ c_i &= \frac{2}{n+1} \sum_{k=0}^{n} y_k T_i(x_k), \forall i = 1,\cdots,n \end{aligned} c0ci=n+11k=0∑nyk=n+12k=0∑nykTi(xk),∀i=1,⋯,n
从而直接得到 P n ( x ) P_n(x) Pn(x) 在基函数 T i ( x ) T_i(x) Ti(x) 下的表示。
[CHKKS18] 使用 sin 近似 mod q,定义:
S ( t ) : = q 2 π sin ( 2 π q t ) S(t) := \frac{q}{2\pi}\sin\left(\frac{2\pi}{q}t\right) S(t):=2πqsin(q2πt)
对于 CKKS 解密函数 [ b − ⟨ a , s ⟩ ] q = m + e [b-\langle a,s\rangle]_q=m+e [b−⟨a,s⟩]q=m+e,因为消息规模远小于密文模数 m ≪ q m \ll q m≪q,因此这里的 mod 运算可以用 sin 较好地近似。其中的 b − ⟨ a , s ⟩ = m + e + q I ∈ Z b-\langle a,s\rangle=m+e+qI \in \mathbb Z b−⟨a,s⟩=m+e+qI∈Z 是范围有界的整数。
给定 t = q I + m t=qI+m t=qI+m,并且满足 ∣ I ∣ < K |I| < K ∣I∣<K 和 m ≪ q m \ll q m≪q,那么 [ t ] q ≈ S ( t ) [t]_q \approx S(t) [t]q≈S(t)
然后使用 exp 计算 sin,定义:
E ( t ) : = q 2 π exp ( 2 π i q t ) E(t) := \frac{q}{2\pi}\exp\left(\frac{2\pi i}{q}t\right) E(t):=2πqexp(q2πit)
易知 S ( t ) = E ( t ) − E ( − t ) 2 S(t)=\frac{E(t)-E(-t)}{2} S(t)=2E(t)−E(−t)
最后使用 Talor 近似 exp,
P ( x ) : = ∑ k = 0 n ( i x ) k k ! P(x) := \sum_{k=0}^{n} \frac{(ix)^k}{k!} P(x):=k=0∑nk!(ix)k
它的误差为 ∣ exp ( i x ) − P ( x ) ∣ ≤ ∣ x ∣ n + 1 ( n + 1 ) ! |\exp(ix) - P(x)| \le \frac{|x|^{n+1}}{(n+1)!} ∣exp(ix)−P(x)∣≤(n+1)!∣x∣n+1,其中 x = 2 π t / q x=2\pi t/q x=2πt/q,因此如果比率 [ t ] q / q [t]_q/q [t]q/q 越小,那么只需要更低的多项式次数 n n n,就可以使近似误差足够低。
[HK20] 中说 [CHKKS18] 为了高效计算(我没找到),将 Taylor 近似多项式仅定义在接近原点的较小 domain 上(从而度数较低),然后计算 t ′ = t / 2 p , p ∈ Z + t'=t/2^p, p\in \mathbb Z^+ t′=t/2p,p∈Z+ 使得它足够接近原点,最后使用二倍角公式根据 S ( t ′ ) S(t') S(t′) 计算出 S ( t = 2 p ⋅ t ′ ) S(t=2^p \cdot t') S(t=2p⋅t′)
我们可以发现,Taylor 多项式的系数是超指数级下降的,因此对于较大的度数,不得不使用极高精度的浮点数,否则将会导致较高的数值误差(注意区分:近似误差、数值误差)
[CCS19] 转而使用切比雪夫插值,形如
P n ( x ) = ∑ k = 0 n c k T k ( x ) P_n(x) = \sum_{k=0}^{n} c_k T_k(x) Pn(x)=k=0∑nckTk(x)
对于 [ − 1 , 1 ] [-1,1] [−1,1] 上 Lipschitz continuous 函数 f f f,存在唯一的 P n ( x ) P_n(x) Pn(x) 满足 P n ( x j ) = f ( x j ) P_n(x_j)=f(x_j) Pn(xj)=f(xj),其中 x j = cos ( j π / n ) , 0 ≤ j ≤ n x_j=\cos(j\pi/n),0\le j\le n xj=cos(jπ/n),0≤j≤n
假设 P n ∗ ( x ) P_n^*(x) Pn∗(x) 是最小化最大(minimax)多项式,它最小化了 ∥ f − P n ∗ ∥ ∞ \|f-P_n^*\|_\infty ∥f−Pn∗∥∞ 范数。可以证明 P n ( x ) P_n(x) Pn(x) 仅仅是对数损失,
∥ f − P n ∥ ∞ ≤ ( 2 π log n + 2 ) ⋅ ∥ f − P n ∗ ∥ ∞ \|f-P_n\|_\infty \le \left( \frac{2}{\pi}\log n + 2 \right) \cdot\|f-P_n^*\|_\infty ∥f−Pn∥∞≤(π2logn+2)⋅∥f−Pn∗∥∞
为了近似 S ( t ) : = q 2 π sin ( 2 π q t ) S(t) := \frac{q}{2\pi}\sin\left(\frac{2\pi}{q}t\right) S(t):=2πqsin(q2πt),其中 t ∈ [ − K q , K q ] t \in [-Kq,Kq] t∈[−Kq,Kq],将它缩放到区间 [ − 1 , 1 ] [-1,1] [−1,1] 上,
g ( x ) : = 1 2 π sin ( 2 π K x ) , x ∈ [ − 1 , 1 ] g(x) := \frac{1}{2\pi}\sin(2\pi Kx),\,\, x \in [-1,1] g(x):=2π1sin(2πKx),x∈[−1,1]
然后使用切比雪夫插值,得到 g ( x ) g(x) g(x) 对应的多项式 P n ( x ) = ∑ k = 0 n c k T k ( x ) P_n(x) = \sum_{k=0}^{n} c_k T_k(x) Pn(x)=∑k=0nckTk(x)
对比 Taylor 近似,Chebyshev 近似的多项式度数要小得多,因此数值误差更小。为了计算 P n ( x ) P_n(x) Pn(x),可以先将系数 c k c_k ck 转化为 Power Basis { x k } \{x^k\} {xk} 下的系数 c k ′ c_k' ck′,然后使用 [PS73] 的单变元多项式求值算法。然而,这个转换矩阵是病态的(ill-conditioned),导致较大的数值误差。如果利用 T k ( x ) T_k(x) Tk(x) 的迭代关系,对它们依次求值,最终使用 c k c_k ck 组合求值结果,那么计算复杂度是 O ( n ) O(n) O(n) 次非标量乘法,尤其是同态运算下(非标量乘法的开销很大)这是不可接受的。
[CCS19] 修改了 [PS73] 的算法,将其中 Power Basis 替换为 Chebyshev Basis,并设计了直接在 Chebyshev Basis 下执行的长除法。整体流程完全就是 PS 原始算法,只是其中的具体运算从基 { x k } \{x^k\} {xk} 替换到基 { T k ( x } \{T_k(x\} {Tk(x},复杂度为 2 n + O ( log n ) \sqrt{2n}+O(\log n) 2n+O(logn) 次非标量乘法。
[HK20] 观察到仅当 m : = [ t ] q ≪ q m:=[t]_q \ll q m:=[t]q≪q 时,才有 [ t ] q ≈ E ( t ) [t]_q \approx E(t) [t]q≈E(t),因此只需使用 p ( t ) p(t) p(t) 拟合 E ( t ) E(t) E(t) 的部分 domain 即可。而在 [CHKKS18] 和 [CCS19] 中使用的都是全域 [ − 1 , 1 ] [-1,1] [−1,1] 上的拟合,导致多项式次数较高。
通过缩放平移,将 sin ( 2 π q t ) \sin(\frac{2\pi}{q}t) sin(q2πt) 变换为 cos ( 2 π t ) \cos(2\pi t) cos(2πt),输入的区间是:
t ∈ ⋃ i = − k + 1 K − 1 I i , I i : = [ i − 1 4 − ϵ , i − 1 4 + ϵ ] t \in \bigcup_{i=-k+1}^{K-1} I_i,\,\, I_i:=[i-\frac{1}{4}-\epsilon,\, i-\frac{1}{4}+\epsilon] t∈i=−k+1⋃K−1Ii,Ii:=[i−41−ϵ,i−41+ϵ]
其中的 ϵ \epsilon ϵ 是 [ t ] q / q [t]_q/q [t]q/q 的上界(足够小,使得 S ( t ) S(t) S(t) 足够近似 [ t ] q [t]_q [t]q)
对于区间 [ a , b ] [a,b] [a,b],采取 Chebyshev method 选取如下的插值点(是 Chebyshev root 而非 Chebyshev point),
t j = b + a 2 + b − a 2 cos ( 2 j − 1 2 n + 2 π ) , 1 ≤ j ≤ n + 1 t_j = \frac{b+a}{2} + \frac{b-a}{2} \cos\left( \frac{2j-1}{2n+2}\pi \right),\,\, 1 \le j \le n+1 tj=2b+a+2b−acos(2n+22j−1π),1≤j≤n+1
注意到 cos ( 2 π t ) \cos(2\pi t) cos(2πt) 的区间是间断的,[HK20] 对于各个小区间 I i I_i Ii 分别采样 d i d_i di 个插值点(而非 [ − K , K ] [-K,K] [−K,K] 的全域),
{ t i j ∈ I i : − K < i < K , 1 ≤ j ≤ d i } \{t_{ij} \in I_i: -K{tij∈Ii:−K<i<K,1≤j≤di}
使用它们插值出的 P n ( t ) , n = ∑ i d i − 1 P_n(t), n=\sum_i d_i-1 Pn(t),n=∑idi−1 的余项规模为
∥ cos ( 2 π t ) − P n ( t ) ∥ ≤ ( 2 π ) n + 1 ( n + 1 ) ! ⋅ max { M − K + 1 , ⋯ , M K − 1 } \|\cos(2\pi t) - P_n(t)\| \le \frac{(2\pi)^{n+1}}{(n+1)!} \cdot \max\{M_{-K+1},\cdots,M_{K-1}\} ∥cos(2πt)−Pn(t)∥≤(n+1)!(2π)n+1⋅max{M−K+1,⋯,MK−1}
其中 M i = max t ∈ I i ∥ w ( t ) ∥ M_i=\max_{t \in I_i}\|w(t)\| Mi=maxt∈Ii∥w(t)∥, w ( t ) = ∏ i , j ( t − t i j ) w(t)=\prod_{i,j} (t-t_{ij}) w(t)=∏i,j(t−tij)
为了确定合适的 d i d_i di,[HK20] 初始设置 d i = 1 d_i=1 di=1,然后迭代计算 M i M_i Mi,然后找出值 M i M_i Mi 最大的那个区间 I i ∗ I_{i^*} Ii∗,设置 d i ∗ = d i ∗ + 1 d_{i^*}=d_{i^*}+1 di∗=di∗+1 重新在 I i ∗ I_{i^*} Ii∗ 中采样。迭代此过程,直到余项的规模小于预设的误差上界,得到采样策略 { d i } \{d_i\} {di},最终插值出 P n ( t ) P_n(t) Pn(t)
因为插值点集中在各个 I i I_i Ii 里,所以近似误差降低的很快,所需的多项式度数比 [CCS19] 的切比雪夫插值更低。
为了同态计算 P n ( t ) P_n(t) Pn(t),如果表示为 Power Basis P n ( t ) = ∑ i p i t i P_n(t) = \sum_i p_i t^i Pn(t)=∑ipiti,由于某些极小的系数 p i p_i pi 是不稳定的数值,导致数值误差很大,并且如何用 CKKS 加密它们也是个问题。[HK20] 也采用了 Chebyshev Basis P n ( t ) = ∑ i c i T i ( t ) P_n(t) = \sum_i c_i T_i(t) Pn(t)=∑iciTi(t),区间扩张到 t ∈ [ − K , K ] t\in [-K,K] t∈[−K,K],定义基函数 { T ~ i ( t ) : = T i ( t / K ) } \{\tilde T_i(t):=T_i(t/K)\} {T~i(t):=Ti(t/K)}。由于 ∣ T ~ i ( t ) ∣ ≤ 1 , ∀ ∣ t ∣ < K |\tilde T_i(t)| \le 1,\forall |t|
[HK20] 也没有采用 [PS73] 求值算法,而是使用 BSGS 来求值,
BSGS 算法的复杂度为 2 2 n + 1 / 2 ⋅ log n + O ( 1 ) 2\sqrt{2n}+1/2 \cdot \log n+O(1) 22n+1/2⋅logn+O(1) 次非标量乘法,而 [CCS19] 使用的 PS 算法变体的复杂度为 2 n + log n + O ( 1 ) \sqrt{2n}+\log n+O(1) 2n+logn+O(1) 次非标量乘法。虽然渐进复杂度 PS 算法更好,但是因为使用的插值多项式度数较小,导致 log n \log n logn 项的占比较高,实际中反而不如 BSGS 快。
此外,[HK20] 还结合了 [CHKKS18] 的二倍角技术,将 t t t 缩放为 t ′ = t / 2 r t'=t/2^r t′=t/2r,然后在区间 I i ′ = I i / 2 r I_i'=I_i/2^r Ii′=Ii/2r 上近似 cos ( 2 π t ′ ) \cos(2\pi t') cos(2πt′)。最终,将近似多项式的度数从 [CCS19] 的 119 119 119,降低到了仅为 30 30 30,自举速度大幅提高。