秦九韶算法的思想与解多项式算法时间比较附代码
多项式计算之秦九韶算法
多项式求值与秦九韶算法
一、引言
多项式函数常常用于描述现实世界的各种规律,而在用计算机计算多项式的值的时候,不同算法的计算时空复杂度通常不一样。如一个n次多项式
f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0],我们的常规计算办法是,直接计算,这样我们的时间复杂度为:O(n^2)
下面我们介绍秦九韶算法:
其核心思想:后面每一次计算都依赖于前面计算的结果,这样以减少重复的计算。
简单引例:
计算 x^8 直接算将算8次乘法,而这8次都是必要的吗?显然不是,当我们知道x^2的值后,计算x^4只需要用x^2*x^2即可。秦九韶算法正是这样来减少计算量的。
一、推导
a0--->an依次是最高项,到常数项系数
从而bn就是所求的解
三、算法描述
由以上推导知,bn就是我们所求的值,要求bn就得逆推到b0,由于b0=a0我们就可以求出b1依次下去就可以求出bn。
数据结构:
1.数组
1.a[]用于保存系数
ps:一般做法还需要保存b[],我们这里只是用到前一项,所以一个常数即可
c++实现:
#include <iostream> using namespace std; inline double calculate(double x, double* a, int n) /*x:f(x)中的x。a是系数数组 */ {double b = a[0];for (int i = 1 ; i <= n; i++){b = b * x + a[i];}return b; }
int main(int argc, char const argv[])
{
double x = 0;
int n = 0;
cout << “最高项幂:”;
cin >> n;
double a = new double[n+1];
cout << “\n请输入个项系数(系数为0输入0):”;
for (int i = 0; i <= n; i++)
{
cin >> *(a + i);
}
cout<<"\n要计算的x:";
cin>>x;
double res = calculate(x, a, n);
cout << res << endl;
return 0;
}
MyTest.cpp : 定义控制台应用程序的入口点。
/*
时间测量函调用
*/#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <math.h>
#pragma warning(disable:4996)
#define MAXN 10
#define MAXK 1e4
//代表10的7次方
/*f(x)=a0 +a1*x+a2*x*x+a3*x*x*x +...+an*x的N次方 */clock_t start,stop;
/*clock_t是clock()函数返回的变量的类型*/
double duration;
/*记录被测函数运行的时间,以秒为单位*/double f1(int n, double a[], double x){int i;double p = a[0];for (i = 1; i <= n; i++){p += a[i] * pow(x, i);}return p;
}/* 秦九韶算法 */
double f2(int n, double a[], double x){int i;double p = a[n];for (i = n; i > 0; i--){p = a[i - 1] + x*p;}return p;
}int _tmain(int argc, _TCHAR* argv[])
{/*不在测试范围内的准备函数,写在开始之前*/int i;double a[MAXN];for (i = 0; i < MAXN; i++)a[i] = (double)i;start = clock();for (i = 0; i < MAXK;i++)f1(MAXN - 1, a, 1.1);stop = clock();duration = ((double)(stop - start)) / CLK_TCK / MAXK;/*其他不在测试范围外的处理写在后面*/printf("ticks1 = %f\n", (double)(stop - start));printf("duration1 = %6.2e\n", duration);start = clock();for (i = 0; i < MAXK;i++)f2(MAXN - 1, a, 1.1);stop = clock();duration = ((double)(stop - start)) / CLK_TCK/MAXK;/*其他不在测试范围外的处理写在后面*/printf("ticks2 = %f\n", (double)(stop - start));printf("duration2 = %6.2e\n", duration);/*%6.2e 表示6表示输出长度(包含小数点),2表示输出小数点位数,d表示输出为十进制e表示用科学计数法表示*/return 0;
}
秦九韶算法的思想与解多项式算法时间比较附代码相关推荐
- 秦九韶多项式运算时间java,秦九韶算法的思想与解多项式算法时间比较附代码...
#include #pragma warning(disable:4996) #define MAXN 10 #define MAXK 1e4 //代表10的7次方 /*f(x)=a0 +a1*x+a ...
- 【算法知识】详解堆排序算法
点击蓝色字关注我们! 什么是堆 「堆」首先是一个完全二叉树,「堆」分为「大顶堆」和「小顶堆」: 「大顶堆」 : 每个节点的值大于或等于其左右孩子节点的值,称为大顶堆. 「小顶堆」同理就是每个节点的值小 ...
- 【算法知识】详解基数排序算法
已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 [算法知识]详解快速排序算法 [算法知识]详解归并排序算法 基本思想 基数排序的思想是将整数按位数切 ...
- 【算法知识】详解归并排序算法
已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 [算法知识]详解快速排序算法 基本思想 归并排序的基本思想是: 先将序列一次次分成子序列,直到子序列 ...
- 【算法知识】详解快速排序算法
基本思想 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 本文的思路是以从小到大为例讲的. 快速排序的基本思想是任取待排序序列的一个元素作为中心元素 ...
- 基于多次傅里叶变换算法的快速相位解包裹算法研究
▒▒本文目录▒▒ 一.前言 二.快速相位解包裹算法实例分析 三.参考文献 一.前言 一般而言,干涉相位图中的相位值通常被限制在主值区间内,这种相位被称为缠绕相位.在缠绕相位图中,像素点的相位值在-π或 ...
- 201-冒泡排序算法的思想和性能分析(时间、空间复杂度 稳定性)
1.冒泡排序 特点: 相邻元素两两比较,把值大的元素往下交换. 缺点: 数据交换的次数太多了. 2.冒泡排序算法的思想 上图是无序的数据,要进行排序. 冒泡排序就是: 每一趟都是从开始的这个元素,两两 ...
- 基于蜜蜂优化算法优化的卷积神经网络(CNN)图像分类——附代码
目录 摘要: 1.蜜蜂优化算法: 2. 卷积神经网络(CNN) 输入层 隐含层 输出层 3. 本文Matlab代码: 摘要: 本文通过蜜蜂优化算法,优化了卷积神经网络(CNN)中的超参数,主要是网 ...
- 基于蝗虫(蚱蜢)优化算法优化的支持向量机分类模型及其MATLAB实现-附代码
基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码 文章目录 基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码 1. 模型 ...
- 图像处理/计算机视觉/python环境下如何用滤波器、算法恢复图片,对图片去污【附代码】
图片修复.图片恢复 一.问题描述 二.效果图 三.代码附录 一.问题描述 利用算法处理受损受污染的图片,使其尽量复原 二.效果图 三.代码附录 去污算法一 import cv2 from matplo ...
最新文章
- php 当前页面下载文件,php实现当前页面点击下载文件的简单方法
- 从视觉系统的原理入手 破解VR眩晕症
- 锁用不好,可能把自己锁住哦!(解决多线程的死锁问题)
- Hadoop sqoop数据导入导出工具安装
- OpenStack基金会携手Intel、Hyper发布开源Kata Containers项目
- 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...
- 在Pivotal Web Service上发布Spring Boot应用
- Pytorch transforms.Resize()的简单用法
- mysql常见排错_mysql 一些排错技巧
- 令人疑惑的defaultValueAttribute
- C++“准”标准库Boost学习指南(3):Boost.Utility
- 基于STM32F429的DCMI实现OV7725-NF无缓存摄像头的图像采集HAL库
- 极域电子教室怎么修改学生端频道号
- ROS学习笔记9 —— launch文件
- 使用idea连接阿里云RDS数据库
- The 12th tip of DB Query Analyzer, powerful in text file process
- vlookup 函数使用方法
- WORD表格数据运算技巧
- 统计单词数,题解简单易懂量少
- python + pyqt +opencv 有界面,对lable中的图片进行图像旋转,向右平移,向下平移,二值化,灰度,边缘检测
热门文章
- Linux命令行配置无线,Linux_CentOS-6.4无线上网命令行配置介绍,待连接的WIFI的ssid为“thmrdq - phpStudy...
- 顶级在线图片处理工具Photopea
- 怎样将jpg、png制作成windows桌面ico图标文件
- 计算机ping命令6,Mac电脑ping命令区别和IPv6命令
- 英伟达显卡算力榜(nvidia GPU compute capability)
- win10计算机系统优化设置,小编教你windows10设置优化提高系统性能
- android hci设备,android-hci相关操作
- 壳聚糖/葡聚糖/纳米羟基磷灰石复合水凝胶/鱼明胶-半乳糖壳聚糖水凝胶肝支架的制备
- 路由器,猫,交换机的区别
- QUST程序设计赛F题:Bash博弈