多项式基础
一个以(x)为变量的多项式定义在一个代数域(F)上,可以写作:
[A(x) = sum_{i = 0} ^ n a_i x^i
]
其中(a_i in F)。
对于一个多项式(f(x)),其最高次项的次数为这个多项式的度,记作(deg{f})。
多项式加法
有两个多项式(A(x)和B(x)),且(deg{A} = n,deg{B} = m),那么:
[C(x) = A(x) + B(x) = sum_{i = 1} ^ {max(n,m)} (a_i +b_i) x ^ i
]
减法同理。
多项式的加减法可以在(O(n))的时间复杂度内求出。
多项式乘法
有两个多项式(A(x))和(B(x)),且(deg{A} = deg{B} = n)
[C(x) = A(x)B(x) = sum_{i = 0} ^ {n - 1} sum_{j = 0} ^ {n - 1} a_i b_j x^{i + j} = sum_{i = 0} ^ {2n - 2} c_i x ^ i
]
卷积
设(a,b)是两个数列,那个两个数列的卷积(c)定义为
[c_k = sum_{i + j = k} a_i b_j Leftrightarrow c_k = sum_{i = 0} ^ k a_i b _{k - i}
]
多项式的表示
系数表示法
对于一个多项式(A(x),deg{A} = n),其系数组成了一个向量(a = (a_0,a_1,a_2,a_3, cdots a_{n - 1}))
点值表示法
对于一个多项式(A(x), deg{A} = n),通过选取任意(x_i),形成点的集合:
[{(x_0,A(x_0)),(x_1,A(x_1)),(x_2,A(x_2)),(x_3,A(x_3)), cdots (x_{n - 1},A(x_{n - 1}))}
]
转换:
系数转点值:随机选取(n)个互不相同的(x_0,x_1,x_2,x_3,cdots , x_{n - 1}),并进行计算(A(x_0),A(x_1),A(x_2),A(x_3), cdots ,A(x_{n - 1})),通过霍纳法则,计算(A(x_i))的时间为(O(n)),所以整个算法为(O(n^2))(后面似乎有更快的算法)
点值转系数:咕了,睡个觉再写。