barycentric evaluation快速入门

1. 引言

使用多项式的强大技术之一在于:

  • 已知该多项式的一组evaluations
  • 可直接计算其在某不同point的evaluation值

如,若 P ( x ) P(x) P(x)为degree-100多项式:

  • 可使用evaluations P ( 0 ) , P ( 1 ) , ⋯   , P ( 100 ) P(0),P(1),\cdots,P(100) P(0),P(1),,P(100)
  • O ( N ) O(N) O(N)时间内,直接计算 P ( 101 ) P(101) P(101) P ( 1247130 ) P(1247130) P(1247130),而不需要重构该多项式。

本文将描述具体的实现方式。详细技术细节可参看:

2. 通用技术

P ( x ) P(x) P(x)为多项式, x 1 , ⋯   , x n x_1,\cdots,x_n x1,,xn为一组对 P ( x ) P(x) P(x)的评估点,具有的评估值分别为 y 1 , ⋯   , y N y_1,\cdots,y_N y1,,yN

可将 P ( x ) P(x) P(x)看成是线性组合 ∑ i y i L i ( x ) \sum_i y_iL_i(x) iyiLi(x),其中:

  • L i ( x ) L_i(x) Li(x)多项式,在 x i x_i xi处值为1,而在该集合内的其它x坐标处,值为0。

每个 L i ( x ) L_i(x) Li(x)可表示为:
( x − x 1 ) ( x − x 2 ) ⋯ ( x − x i − 1 ) ( x − x i + 1 ) ⋯ ( x − x N ) ( x i − x 1 ) ( x i − x 2 ) ⋯ ( x i − x i − 1 ) ( x i − x i + 1 ) ⋯ ( x i − x N ) \frac{(x-x_1)(x-x_2)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_N)}{(x_i-x_1)(x_i-x_2)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_N)} (xix1)(xix2)(xixi1)(xixi+1)(xixN)(xx1)(xx2)(xxi1)(xxi+1)(xxN)

将上面的分母表示为 d i d_i di,将所有乘积 ( x − x 1 ) ( x − x 2 ) ⋯ ( x − x N ) (x-x_1)(x-x_2)\cdots(x-x_N) (xx1)(xx2)(xxN)(不跳过任何元素)表示为 M ( x ) M(x) M(x),则 L i ( x ) L_i(x) Li(x)可表示为:
M ( x ) d i ( x − x i ) \frac{M(x)}{d_i(x-x_i)} di(xxi)M(x)

其中:

  • d i d_i di值计算需要 O ( N 2 ) O(N^2) O(N2) time,因每个用时 O ( N ) O(N) O(N),且一共有 N N N项。但这些值仅依赖于evaluation points,而不是特定的多项式。因此可提前预计算并存储,而不需要每次都重新计算。
  • M ( x ) M(x) M(x)在任意点的计算用时为 O ( N ) O(N) O(N)

因此,每个 L i ( x ) L_i(x) Li(x)的计算用时为 O ( N ) O(N) O(N)

从而:
P ( x ) = M ( x ) ∗ ∑ i y i d i ( x − x i ) P(x)=M(x)*\sum_i\frac{y_i}{d_i(x-x_i)} P(x)=M(x)idi(xxi)yi
计算用时也为 O ( N ) O(N) O(N)

3. 特例情况:roots of unity

在barycentric evaluation的很多应用中,可选择evaluation points。一种很舒适的选择是:

  • 选择集合 { 1 , w , w 2 , ⋯   , w N − 1 } \{1,w,w^2,\cdots,w^{N-1}\} {1,w,w2,,wN1},其中 w w w满足 w N = 1 w^N=1 wN=1 N N N为a power of 2。

这种选择的主要优势在于:

  • 取消了对 d i d_i di值的预计算需要。因为对此有一种简单的closed-form value。

原因在于,可将 d i d_i di简化表示为:
∏ 0 ≤ j ≠ i < N ( w i − w j ) \prod_{0\leq j\neq i<N}(w^i-w^j) 0j=i<N(wiwj)

注意有 w N 2 = − 1 w^{\frac{N}{2}}=-1 w2N=1,因此可将上面公式重新表示为:
2 w i ∗ ∏ 0 ≤ j ≠ i < N 2 ( w i − w j ) ( w i + w j ) 2 w^i*\prod_{0\leq j\neq i<\frac{N}{2}}(w^i-w^j)(w^i+w^j) 2wi0j=i<2N(wiwj)(wi+wj)

其中乘积内各项为 ( w i − w j ) (w^i-w^j) (wiwj) ( w i − w j + N 2 ) (w^i-w^{j+\frac{N}{2}}) (wiwj+2N),而 w j + N 2 = − w j w^{j+\frac{N}{2}}=-w^j wj+2N=wj。剩下的项为 ( w i − w i + N 2 ) (w^i-w^{i+\frac{N}{2}}) (wiwi+2N),可简化表示为 2 w i 2w^i 2wi

此时, ( w i − w j ) ( w i + w j ) (w^i-w^j)(w^i+w^j) (wiwj)(wi+wj)可合并表示为 ( w 2 i − w 2 j ) (w^{2i}-w^{2j}) (w2iw2j),因此有:
2 w i ∗ ∏ 0 ≤ j ≠ i < N 2 ( w 2 i − w 2 j ) 2w^i*\prod_{0\leq j\neq i<\frac{N}{2}}(w^{2i}-w^{2j}) 2wi0j=i<2N(w2iw2j)

重复以上过程,有:
2 w i ∗ 2 w 2 i ∗ ∏ 0 ≤ j ≠ i < N 4 ( w 4 i − w 4 j ) 2w^i*2w^{2i}*\prod_{0\leq j\neq i<\frac{N}{4}}(w^{4i}-w^{4j}) 2wi2w2i0j=i<4N(w4iw4j)

继续重复,最终让右侧的乘积项为空。从而有:
2 w i ∗ 2 w 2 i ∗ 2 w 4 i ∗ ⋯ ∗ 2 w N 2 i = N ∗ w ( N − 1 ) i 2w^i*2w^{2i}*2w^{4i}*\cdots * 2w^{\frac{N}{2}i}=N*w^{(N-1)i} 2wi2w2i2w4i2w2Ni=Nw(N1)i

由于 w N = 1 w^N=1 wN=1,从而有:
d i = N w i d_i=\frac{N}{w^i} di=wiN

此外, M ( x ) = ∏ i ( x − w i ) M(x)=\prod_i(x-w^i) M(x)=i(xwi)可简化表示为 x N − 1 x^N-1 xN1,因此,整个计算可简化表示为:
P ( x ) = x N − 1 N ∗ ∑ i y i ∗ w i x − w i P(x)=\frac{x^N-1}{N}*\sum_i\frac{y_i*w^i}{x-w^i} P(x)=NxN1ixwiyiwi

参考资料

[1] Vitalik 2022年3月hackmd A quick barycentric evaluation tutorial
[2] 2004年论文 Barycentric Lagrange Interpolation∗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值