多项式求和算法

作者:whj95

引言

该算法用于解决形如S(x) = a 0 +a 1 x+a 2 x 2 +a 3 x 3 +…+a i x i +…+a n1 x n1 +a n x n 的多项式的和。

算法一:暴力破解

  根据多项式的直观表示方法运用累加“+=”及幂函数“pow(x,i)”进行直接表达:
  核心思想:

循环体
{
  S(x) += 下标为i的系数 * x的i次方;
}

  C++参考代码如下:

double polynomialsum(int n;double a[];double x)
{
  double S= 0;
  for(int i = 0; i <= n; i++)//注意是n不是n-1
      S += a[i] * pow(x,i);
  return S;
}

  优点:这种算法比较直观而且直接,容易想到。
  缺点:太直接以致时间复杂度T(n) = O(x n ),为多项式时间,显然数据大了无法接受。

算法二:类递归思想

  将多项式进行巧妙的化简,每一步都提出x并分离。
  于是该多项式算法可以从内往外循环,我们可以看到每一个完整括号内都可以看成“系数+x * S
S(x) = a 0 +a 1 x+a 2 x 2 +a 3 x 3 +…+a i x i +…+a n1 x n1 +a n x n = a 0 +x(a 1 +x(a 2 +x(…+x(a n ))))
  核心思想:

循环体
{
  S = 逆序系数 + x * S;
}

  C++参考代码如下:

double polynomialsum(int n;double a[];double x)
{
  double S = 0;
  for(int i = n; i >= 0; i--)//注意是n不是n-1
    S = a[i] + x * S;
}

  优点:有效降低了算法复杂度T(n) = O(n),由算法一的多项式时间降为线性时间。
  缺点:创造这个想法时候最难,想到了就没什么缺点了。

  注:以上两种也可针对非连续指数的多项式使用,可将缺省项看作0*x i ,所以不论是暴力还是提取法都能使用,只不过要将缺省项的系数全部置为0即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值