【发布时间】:2016-01-09 03:25:58
【问题描述】:
给定一个多项式的 n 根,其前导系数为 1。
我如何有效地找出这个多项式的系数?
数学上,
我知道,如果第一个系数是 1,那么一次取 k 的乘积根之和将是多项式的 k+1-th 系数。
我的代码就是基于这种方法的。
换句话说,如何以最佳方式从一次获取k 的列表中找到数字的乘积之和。
int main()
{
int n, sum;
cin >> n;
int a[n];
for (int i=0; i<n; i++) cin >> a[i];
//for the second coefficient
sum=0;
for (int i=0; i<n; i++)
{
sum+=a[i];
}
cout << sum << endl;
//for the third coefficient
sum=0;
for (int i=0; i<n; i++)
{
for (int j=i+1; j<n; j++)
{
sum+=a[i]*a[j];
}
}
cout << sum << endl;
}
为了更高的系数,我考虑过标记是否将它们带入产品中,但没有编写代码,因为如果多项式的次数很大,它实际上是没有用的.
【问题讨论】:
-
直接计算多项式是 O(n^2) IIRC。
-
@n.m.您能描述一下
O(n^2)方法吗? -
谢谢@MBo。无法将评论标记为答案。你能补充一个答案吗? (也许在伪代码/python/c++ 中)?我不明白该代码中的 SetLength 函数。
-
希望Pascal接近伪代码。 SetLength设置输出动态数组Coeff的长度,所以它的索引范围是0..N(N次幂多项式有N+1个系数)。奇数运算符评估参数的奇数/偶数
标签: c++ algorithm math combinations