比较求N阶多项式的算法比较

#include<stdio.h>
#include<math.h>
#include<time.h>

#define MAXK 1e6
/*
you can get the question fromE:\project\java_algorithm\C_Algorithem\algorithm01\week01\compareForAndRecursion demo2.bmp
or from web:http://www.icourse163.org/learn/ZJU-93001?tid=1002019005#/learn/content?type=detail&id=1002635001&cid=1002891006
*/

/*
implement this question using violence loop
the T(n)=O(n^2);
*/
double fun1(double x,int n){
    double sum=1.0;
    int i;
    for(i=1;i<=100;i++){
        sum+=pow(x,i)/i;
    }
    return sum;
}

/*
we can store x^i into a temp, every time
we only need to multiply i base on last time value.
T(n)=2n
*/
double fun2(double x,int n){
    double sum=1.0;
    double temp=1;
    int i;
    for(i=1;i<100;i++){
        temp=temp*x;
        sum=sum+temp/i;
    }
    return sum;
}

/*Just a main method used to test*/
void main(){
    int i;
    //start the time,use the second
    clock_t start,end;
    double duration;//used to stored top - end
    start=clock();
    for(i=0;i<MAXK;i++){
        fun1(1.1,100);
    }
    end=clock();
    duration=((double)(end-start))/CLK_TCK/MAXK;
    printf("every method fun1 using average time:%f\n",duration);

start=clock();
    for(i=0;i<MAXK;i++){
        fun2(1.1,100);
    }
    end=clock();
    duration=((double)(end-start))/CLK_TCK/MAXK;
    printf("every method fun2 using average time:%f\n",duration);

/*
    summary:sometimes,you can using temporary variable to reduce the T(n)
    */
}

时间: 2024-10-02 07:55:39

比较求N阶多项式的算法比较的相关文章

OJ刷题之《求n阶勒让德多项式》

题目描述 用递归方法求n阶勒让德多项式的值,递归公式为 n=0     pn(x) =1 n=1     pn(x) =x n>1     pn(x) =((2n-1)*x* pn-1(x) -(n-1)* pn-2(x))/n 结果保留2位小数. 输入 n和x的值. 输出 pn(x)的值. 样例输入 2 2 样例输出 5.50 提示 主函数已给定如下,提交时不需要包含下述主函数 /* C代码 */ int main() { int x,n; scanf("%d%d",&

双链表&amp;链表合并&amp;多项式相加算法

//单链表的合并 //链表合并 //两个链表必须是有序的 #define Maxsize 5 typedef  int elemtype; typedef struct linklist { elemtype data; struct linklist *next; }Linklist; //建立链表1 Linklist *CreateList1 () { int i,data ; Linklist *head, *p, *q; head=p=(Linklist  *)malloc(sizeof

UVA 10951 Polynomial GCD 多项式欧几里德求最大公共多项式

今天作比赛遇上了HDU3892,都分析出来怎么做了,可惜不会求多项式的最大公共多项式,当时写了半天,案例也没有跑出来,赛后搜了一下题解,发现有大神做出了,而且是有模版的,不过又搜了一下关于这方面的题目,很少,只发现了这一道,所以先做一下这一道吧 题意,给你两个多项式,求他们的最大公共多项式,然后输出即可,无齿的套用了别人的模版,呵呵! #include<iostream> #include<cstdio> #include<list> #include<algor

HDU3892 Common Roots 多项式欧几里德求最大公共多项式

这就是数论坑的地方了把,有些题目真心偏到你无法想象,需要用到多项式欧几里德求多项式的最大公共多项式 题意:给你n个多项式,问他们有没有共同的根 先分析把,假设有多项式a,b,同时又有多项式k,r,令 a = k*b +r,应题目要求,令解为0,那么a = 0,同时b也要等于0,那么这时候要满足a=b=0 其实 r = 0,这时候就不需要去管k了,有没有发现跟那个扩展欧几里德有点相似的方程,这时候分析一下,肯定跟a,b,r有关系,同时因为他们有共同的根,所以可以把问题转化成b,r的问题了,这时候问

poj1236 Network of Schools ,求强连通分量(Tarjan算法),缩点

题目链接: 点击打开链接 题意: 给定一个有向图,求: 1) 至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点 2) 至少要加多少条边,才能使得从任何一个顶点出发,都能到达全部顶点 顶点数<= 100 求完强连通分量后,缩点,计算每个点的入度,出度. 第一问的答案就是入度为零的点的个数, 第二问就是max(n,m) // 入度为零的个数为n, 出度为零的个数为m. //kuangbin巨巨分析很棒! #include<cstdio> #include<cstring>

随机素数测试(Miller_Rabin算法)和求整数素因子(Pollard_rho算法)

POJ1811 给一个大数,判断是否是素数,如果不是素数,打印出它的最小质因数 随机素数测试(Miller_Rabin算法) 求整数素因子(Pollard_rho算法) 科技题 1 #include<cstdlib> 2 #include<cstdio> 3 const int maxn=10005; 4 const int S=20; 5 int tot; 6 long long n; 7 long long factor[maxn]; 8 long long muti_mod(

poj 2449 Remmarguts&#39; Date 求第k短路 Astar算法

=.=好菜 #include <iostream> #include <cstdio> #include <string.h> #include <cstring> #include <queue> using namespace std; const int N = 1e3+10; const int M = 100000+10; typedef long long ll; const ll INF = 1e15; int n,m,head[N

求逆元的四种算法(拓欧费马小线性推欧拉)

求逆元的四种算法 拓展欧几里得算法求逆元 上一篇博客中已经讲过拓展欧几里得算法,并且讲解了求逆元的原理.这里只列出代码 在要求逆元的数与p互质时使用 代码 //扩展欧几里得定理 int ex_gcd(int a,int b,int& x,int& y) { if(b==0) { x=1; y=0; return a; } int ans = ex_gcd(b,a%b,x,y); int tmp = x; x = y; y = tmp-a/b*y; return ans; } int cal

多项式函数插值:多项式形式函数求值的Horner嵌套算法

设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t)q_2(t)..q_{n-1}(t)=\sum\limits_{i=1}^n(x_i\prod\limits_{j=1}^{i-1}q_j(t))$$ 一般来讲,按照这个形式计算函数在 $t_0$ 点的取值的复杂度为:n-1次 $q_i(t)$ 求值,n-1次浮点数乘法(生成n个不同的乘积),n-