数据结构笔记--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;
}

测试结果

相差大约一个数量级

相关文章推荐

【算法】数据结构与算法分析学习笔记——第三章习题选做快速傅里叶变换与多项式乘法

3.7编写一个函数将两个多项式相乘,用链表实现。必须保证输出的多项式按幂排列并且最多有一项为任意幂。 c.编写一个以O(MNlog(MN))时间执行乘法的程序。...

考研数据结构与算法之单链表多项式的计算(三)

勉勉强强总算是把乘法的功能给实现了,不够有一个巨大的收获就是理解了

数据结构与算法分析 c++11 练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算

练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算 polynome.h #pragma once #include #include #include /...

数据结构 学习笔记(三):线性结构:堆栈,队列,表达式求值,多项式加法运算

前言请跟着上一讲http://blog.csdn.net/Jurbo/article/details/52593532继续学习2.2 堆栈2.2.1 什么是堆栈计算机如何进行表达式求值?【例】算术表达...
  • Jurbo
  • Jurbo
  • 2016年09月20日 15:08
  • 1245

[数据结构与算法]第一周(一):线性表---多项式加法&&字符串插入

1:多项式加法 描述     我们经常遇到两多项式相加的情况,在这里,我们就需要用程序来模拟实现把两个多项式相加到一起。首先,我们会有两个多项式,每个多项式是独立的一行,每个多项式由系数、幂数这样的多...

数据结构算法 多项式

  • 2008年07月11日 13:54
  • 7KB
  • 下载

新手学习数据结构与算法---链表多项式

链表多项式。。。 如有错误多多指教 //多项式链表-------采用尾插法建立 /* polynomial --- 多项式 coef---系数 exp----指数 next--...
  • zsjgs
  • zsjgs
  • 2011年10月16日 16:15
  • 354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构笔记--1.1.3关于算法效率 计算多项式值
举报原因:
原因补充:

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