多项式基础III 多项式多点求值 多项式快速插值

版权声明:转载必须注明原文链接,并且每50字(半角,向上取整)就要注明一次,侵权必究 https://blog.csdn.net/myjs999/article/details/86298595

多项式多点求值

给定 n n 个值 x i x_i ,求 f ( x i ) f(x_i)

f 0 ( x ) = i = 0 n 2 1 f ( x i ) f_0(x)=\sum_{i=0}^{\frac{n}{2}-1}f(x_i) P 0 ( x ) = i = 0 n 2 1 x x i P_0(x)=\prod_{i=0}^{\frac{n}{2}-1}x-x_i 。则有 f ( x ) = P 0 ( x ) z ( x ) + f 0 ( x ) f(x)=P_0(x)z(x)+f_0(x) 其中 z ( x ) z(x) 是某一多项式。

于是对于 i < n 2 i<\frac{n}{2} ,有 f ( x i ) = ( f   m o d   P 0 ) ( x i ) f(x_i)=(f\bmod P_0)(x_i) 。后一半同样。递归计算即可,每次用分治卷积和多项式取模,复杂度为 O ( n log 2 n ) O(n\log^2n)

多项式快速插值

给定 n n 个二元组 ( x i , y i ) (x_i,y_i) ,求 F ( x ) F(x) 使 F ( x i ) = y i F(x_i)=y_i

由拉格朗日插值公式, F ( x ) = i j = ̸ i ( x x j ) j = ̸ i ( x i x j ) y i F(x)=\sum_i\frac{\prod_{j=\not i}(x-x_j)}{\prod_{j=\not i}(x_i-x_j)}\cdot y_i
M ( x ) = i ( x x i ) M(x)=\prod_i(x-x_i) ,则 F ( x ) = i j = ̸ i ( x x j ) M ( x i ) x i x i y i F(x)=\sum_i\frac{\prod_{j=\not i}(x-x_j)}{\frac{M(x_i)}{x_i-x_i}}\cdot y_i F ( x ) = i j = ̸ i ( x x j ) M ( x i ) y i F(x)=\sum_i\frac{\prod_{j=\not i}(x-x_j)}{M'(x_i)}\cdot y_i
此时可以用多项式多点求值求出所有的 M ( x i ) M'(x_i) 。设 A i = y i M ( x i ) A_i=\frac{y_i}{M'(x_i)} ,则等式变为 F ( x ) = i A i j = ̸ i ( x x j ) F(x)=\sum_iA_i\prod_{j=\not i}(x-x_j)
分治即可。设两半边答案分别为 F 0 ( x ) F_0(x) F 1 ( x ) F_1(x) ,则 F ( x ) = F 0 ( x ) i = m i d + 1 r ( x x i ) + F 1 ( x ) i = l m i d ( x x i ) F(x)=F_0(x)\prod_{i=mid+1}^r(x-x_i)+F_1(x)\prod_{i=l}^{mid}(x-x_i)
复杂度为 O ( n log 2 n ) O(n\log^2n)

*2019.01.11 13:30:18

猜你喜欢

转载自blog.csdn.net/myjs999/article/details/86298595