我有一个首项系数为1的多项式的根,即
p(x) = (x-x_1)*...*(x-x_n)
我需要从中获取系数a_n, ..., a_0。
p(x) = x^n + a_{n-1}x^{n-1} + ... + a_0.
请问有没有一种计算效率高的方法来做到这一点?如果有人知道C/C++实现,那么这将是最好的选择。(我已经查看了GSL但它没有提供函数。)
当然,我知道如何在数学上解决它。我知道系数 a_i
是所有具有 n-i
元素的子集的积的总和。但是,如果我采用愚蠢的方式进行迭代,这意味着要遍历所有子集,则需要:
sum^{n-1}_{k=1} ( k choose n) * (k-1)
乘法和
sum^n_{k=0} ( k choose n) - n
添加。因此,这两个术语都随着O(n!)
的增长,这太多了,无法将n
个根的列表转换为n
个系数的列表。我相信必须有一种聪明的方法可以重复使用大部分中间结果,但我找不到。