数据结构笔记--1.1.3关于算法效率 计算多项式值

原创 2016年12月05日 09:48:44

秦九韶算法

  • f(x)=a[n]x^n+a[n-1]x^(n-1)+…+a[1]x+a[0]
  • f(x)=(…((a[n]x+a[n-1])x+a[n-2])x+…+a[1])x+a[0].  

clock() 计时函数的用法


#include "stdafx.h"
#include <iostream>
#include <time.h>

clock_t start, stop;
double duration;

int main()
{
    start = clock();
    //myfunction();
    stop = clock();
    duration = ((double)(stop - start)) / CLK_TCK;
    std::cout<<duration;
    return 0;
}

普通方法和秦九韶算法

#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <math.h>
#define MAXK 1e7 //被测函数最大重复调用次数10的7次方
#define MAXN 10
double f1(int n, double a[], double x);
double f2(int n, double a[], double x);
clock_t start, stop;
double duration = 0.0;

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));
    //std::cout << p;
    //std::cout << std::endl;
    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] + p*x;//i-1
    //std::cout << p;
    //std::cout << std::endl;
    return p;
}

int main()
{
    int i;
    double a[MAXN];
    for (i = 0;i < MAXN;i++)
        a[i] = (double)i;

    start = clock();
    //myfunction();
    for (i = 0;i < MAXK;i++)
        f1(MAXN - 1, a, 1.1);
    stop = clock();
    duration = ((double)(stop - start)) / CLK_TCK/MAXK;
    std::cout << "1=" << ((double)(stop - start));
    std::cout << std::endl;
    std::cout <<"1="<< duration;
    std::cout << std::endl;

    start = clock();
    //myfunction();
    for (i = 0;i < MAXK;i++)
        f2(MAXN - 1, a, 1.1);
    stop = clock();
    duration = ((double)(stop - start)) / CLK_TCK/MAXK;
    std::cout << "2=" << ((double)(stop - start));
    std::cout << std::endl;
    std::cout << "2="<<duration;
    return 0;
}

测试结果

相差大约一个数量级

多项式求值的几个简单算法(C语言)

最近在读 Numerical Recipes in C++ ,上面给了些多项式求值的算法,很实用。放在这里备用。三个函数,分别是多项式求值,多项式求导数值,多项式求各阶导数值。下面的代码全都简单验算过...
  • liyuanbhu
  • liyuanbhu
  • 2017年03月12日 22:10
  • 2402

递归计算多项式的值

递归计算多项式的值 一个多项式可以拆分成许多一次多项式的嵌套相乘。 y = 1 + x + x^2 = 1 + (1 + x) * x 学过数学基本都会,这里就是利用递归来计算每一个嵌套的一次...
  • qq_22075977
  • qq_22075977
  • 2016年01月07日 11:36
  • 1052

C++ 多项式计算器

多项式计算器 控制台项目
  • Z_J_Q_
  • Z_J_Q_
  • 2017年05月31日 19:31
  • 324

数据结构_写程序计算给定多项式在给定点处的值

#include "stdio.h" #include "time.h" #include "math.h" //clock()捕捉从程序开始运行到clock()被调用时所耗费的时间,clock_t...
  • caonian_
  • caonian_
  • 2016年04月23日 22:34
  • 565

常见算法-多项式计算(1)

最近在学算法,做做笔记,便于以后温习。 学习资源:《常用算法程序集》 一。多项式求值 1.一维多项式 问题描述:计算形如 的多项式在指定点x处的函数值。 问题分析:首先,将多项式表述成如下嵌套形式...
  • hitwhylz
  • hitwhylz
  • 2013年09月02日 21:21
  • 8109

数据结构课程设计一元稀疏多项式计算器

#include #include #include typedef struct Polynomial {  float coef;            int exp;       ...
  • xuan_xinya
  • xuan_xinya
  • 2013年04月01日 19:00
  • 1735

数据结构实践——链表:多项式求和

本文针对数据结构基础系列网络课程(2):线性表的实践项目。【项目6 - 多项式求和】   用单链表存储一元多项式,并实现两个多项式的加法。 提示: 1、存储多项式的数据结构   多...
  • sxhelijian
  • sxhelijian
  • 2015年09月12日 11:31
  • 7554

[数据结构] 算法效率 以“计算多项式值”为例

计算多项式值计算下面多项式的数值:f(x)=∑i=09i∗xif\left ( x \right )=\sum_{i=0}^{9}i*x^{i} 途径1:通过循环来实现f(x)=a0+a1x+⋅⋅⋅+...
  • qq_37339217
  • qq_37339217
  • 2017年09月21日 00:29
  • 46

数据结构_多项式相加,相减,相乘

经过2天的奋斗终于解决了~~           Description  /***************************************************...
  • essencelite
  • essencelite
  • 2013年09月18日 21:11
  • 2055

数据结构学习笔记(二)多项式加法与乘法

之前自己看书学链表、栈、队列,觉得比较难懂,还是得自己动手实践下。这次就是实现一个多项式的加法和乘法运算,主要是要求熟练链表的各种操作。 看看程序的大体框架是: 设计数据结构:多项式的表示。可以用数...
  • sinat_21595363
  • sinat_21595363
  • 2016年03月26日 23:39
  • 621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构笔记--1.1.3关于算法效率 计算多项式值
举报原因:
原因补充:

(最多只允许输入30个字)