标签:... 多项式 fft ntt 003 元算 高斯消 乘法
实用算法 003:高斯消元算多项式乘法
众所周知ntt/fft是目前已知的时间复杂度最优的多项式乘法算法。
那为什么我们还需要知道这个方法呢?
考虑这个问题:
有 n n n个多项式 p 1 , p 2 , p 3 . . . p n p_1,p_2,p_3...p_n p1,p2,p3...pn。和一个目标多项式 q q q,初始 q = 1 q=1 q=1
有 q q q次操作: m u l i mul\ i mul i。
表示令 q = q × p i q=q\times p_i q=q×pi。
最后输出 q q q的前 a a a次项系数。(保证乘法过程中大于a次项系数都为0)
直接fft/ntt时间复杂度为 O ( a q log a ) O(aq\log a) O(aqloga)。但是fft/ntt的常数巨大,经常会TLE。
下面介绍一种小常数 O ( a 3 + a × q ) O(a^3+a\times q) O(a3+a×q)的做法。
设最终的多项式 q = ∑ a i × x i q=\sum a_{i}\times x^i q=∑ai×xi。
我们若令 x = 1 , 2 , 3 , 4... a x=1,2,3,4...a x=1,2,3,4...a,然后将 x i x^i xi看作常数, a i a_i ai看作未知数,列出 a a a个方程,然后高斯消元即可。可以发现最终的矩阵一定是非奇异的,所以方程一定存在唯一解。
适用范围:
乘法次数多,系数非0的项的个数比较少。
题目: cf917d
标签:...,多项式,fft,ntt,003,元算,高斯消,乘法 来源: https://blog.csdn.net/qq_42925924/article/details/112291170
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。