algorithm - 多项式乘法的 Small-o(n^2) 实现

标签 algorithm pseudocode polynomial-math convolution

我在书后面列出的这个问题上遇到了一些麻烦,我目前正在准备考试,但我似乎无法在书中找到与此相关的任何内容。

有人知道吗?

n 次实多项式是 f(x)=a(n)x^n+⋯+a1x+a0 形式的函数,其中 an,...,a1,a0 是实数。在计算情况下,这样的多项式由其系数序列 (a0,a1,…,an) 表示。假设任意两个实数可以在O(1)时间内相加/相乘,设计一个o(n^2)时间的算法来计算,给定两个n次实数多项式f(x)和g(x),乘积 h(x)=f(x)g(x)。您的算法不应**基于快速傅立叶变换 (FFT) 技术。

请注意它需要小-o(n^2),这意味着它的复杂度必须是次二次的。

我找到的最明显的解决方案确实是 FFT,但我当然不能使用它。我发现了另一种称为卷积的方法,如果您将多项式 A 作为信号,将多项式 B 作为滤波器。 A 通过 B 产生一个移位信号,该信号已被 A“平滑”,结果为 A*B。这应该在 O(n log n) 时间内工作。当然,我完全不确定实现情况。

如果有人对如何实现 small-o(n^2) 实现有任何想法,请分享,谢谢。

最佳答案

small-o :f(x) = o(g(x)) 等价于 lim x -> inf f(x)/g(x) = 0
使用 Karatsuba algorithm

关于algorithm - 多项式乘法的 Small-o(n^2) 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345839/

相关文章:

c++ - float 和双重比较最有效的方法是什么?

algorithm - 有缺陷的棋盘问题——寻找伪代码算法(分而治之)

java - 无法弄清楚如何计算四次多项式

c++ - 多项式除法重载运算符

c++ - 图形在空间中的方向

java - 将 128 位数组优化打包成一个数字

algorithm - 返回特定圆中k个元素的组合的算法

c++ - std::regex 识别多项式方程的系数

algorithm - 什么时候在树中使用父指针?

arrays - 排序:如何对包含 3 种数字的数组进行排序