多项式求和算法
2015-07-13 11:24
204 查看
作者:whj95
4000
+…+aixi+…+an−1xn−1+anxn的多项式的和。
核心思想:
C++参考代码如下:
优点:这种算法比较直观而且直接,容易想到。
缺点:太直接以致时间复杂度T(n) = O(xn),为多项式时间,显然数据大了无法接受。
于是该多项式算法可以从内往外循环,我们可以看到每一个完整括号内都可以看成“系数+x * S之前括号内部总和“
S(x) = a0+a1x+a2x2+a3x3+…+aixi+…+an−1xn−1+anxn = a0+x(a1+x(a2+x(…+x(an))))
核心思想:
C++参考代码如下:
优点:有效降低了算法复杂度T(n) = O(n),由算法一的多项式时间降为线性时间。
缺点:创造这个想法时候最难,想到了就没什么缺点了。
注:以上两种也可针对非连续指数的多项式使用,可将缺省项看作0*xi,所以不论是暴力还是提取法都能使用,只不过要将缺省项的系数全部置为0即可
引言
该算法用于解决形如S(x) = a0+a1x+a2x2+a3x34000
+…+aixi+…+an−1xn−1+anxn的多项式的和。
算法一:暴力破解
根据多项式的直观表示方法运用累加“+=”及幂函数“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(xn),为多项式时间,显然数据大了无法接受。
算法二:类递归思想
将多项式进行巧妙的化简,每一步都提出x并分离。于是该多项式算法可以从内往外循环,我们可以看到每一个完整括号内都可以看成“系数+x * S之前括号内部总和“
S(x) = a0+a1x+a2x2+a3x3+…+aixi+…+an−1xn−1+anxn = a0+x(a1+x(a2+x(…+x(an))))
核心思想:
循环体 { 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*xi,所以不论是暴力还是提取法都能使用,只不过要将缺省项的系数全部置为0即可
相关文章推荐
- romact.apk的总结
- C语言之void类型及void指针
- 原型模式 - 创建者模式
- 字典树(trie)
- JobTracker和TaskTracker详解
- 隐马尔科夫学习资料
- 如何删除windows服务
- C语言之void类型及void指针 分类: C/C++ 2015-07-13 11:24 8人阅读 评论(0) 收藏
- 30天,APP创业从0到1【7.26苏州站】
- 自动布局(Masonry)设置tabbar
- session 原理 数据结构
- Java--对象内存布局
- Core Data 的使用
- windows 通过端口号查找应用服务名
- 数据结构:树结构笔试题目
- Http之Get/Post请求区别
- js ==与===区别
- Android 如何将一个Activity设置成窗口样式
- hdu 1548
- svn 和 git的简单使用