#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> clock_t start,stop; double duration; #define MAXN 10 #define MAXK 1000000 double f1(int n, double a[], double x); double f2(int n, double a[], double x); void func(); void func() { duration = ((double)(stop-start))/CLK_TCK/MAXK; //CLK_TCK : 表示机器始终每秒所走的时钟打点数 printf("ticks = %f\n",(double)(stop - start)); printf("duration = %6.2e\n",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 main() { 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(); printf("This is ticks1\n"); func(); start = clock(); //捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick即“时钟打点” for( i = 0; i < MAXK; i++ ) { f2(MAXN-1, a, 1.1); } stop = clock(); printf("This is ticks2\n"); func(); return 0; }
什么是算法?
- 算法(Algorithm)
- 一个有限指令集
- 接受一些输入(有时不需要输入)
- 产生输出
- 一定在有限步骤之后终止
- 每条指令必须
- 有充分明确的目标,不可有歧义
- 计算机能处理的范围之内
- 描述应不依赖与任何一种计算机语言以及具体的实现手段
求最大子列和