算法的体现
利用时间换取空间,这是我们在上一篇文章介绍的,那么,怎样的算法才是一个好的算法呢,每个人的思维都不一样,那么怎么去衡量这个算法怎么样,那么这篇文章我们就可以通过具体的数据给大家一个直观的认识。
通过编程来实现1-1/x+1/xx⋯*
分析:对于上面这个数学问题,为何说它是数学问题,因为有一定的规律,我们可以这么看,把第一项拿开,那么就是-1/x+1/xx-1/xxx...;那么我们可以看到,后面的一项就等于前面一项-1/x;所以,我们可以进行编程实现。不过我们还需要把它所执行的时间也给计算出来。
#include <stdio.h>
#include <sys/timeb.h>
int main(int argc, const char * argv[]) {
struct timeb startTime,endTime;
long time;
double x,sum = 1,sum1;
int i,j,n;//n代表的是有多少个x相乘,就是后面的项数
scanf("%lf %d",&x,&n);
ftime(&startTime);
for (i = 1; i <= n; i++) {
sum1 = 1;
for (j = 1; j <= i; j++) {
sum1 = sum1*(-1.0/x);
}
sum += sum1;
}
ftime(&endTime);
time = (endTime.time - startTime.time)*1000+(endTime.millitm - startTime.millitm);
printf("sum = %lf time = %ld\n",sum,time);
return 0;
}
运行结果
输入的x = 150 n = 10000,
执行出来的效果,可以看出的时间是233ms
#include <stdio.h>
#include <sys/timeb.h>
int main(int argc, const char * argv[]) {
//这是时间的一个结构体,里面包含了时间相关属性
struct timeb startTime,endTime;
long time;
double x,sum =1,sum1 = 1;
int i,n;
scanf("%lf %d",&x,&n);
ftime(&startTime);//开始计时
for (i = *0; i <= n; i++) {
sum1 = -1.0/x;
sum +=sum1;
}
ftime(&endTime);
//时间是多少毫秒
time = (endTime.time - startTime.time)+(endTime.millitm - startTime.millitm);
printf("sum = %lf time = %ld\n",sum,time);
}
运行结果
输入的x = 150 n = 10000,
执行出来的效果,可以看出的时间是0毫秒
注意
通过上面的例子,我们可以看出,实现一个功能有很多种方式,但是每一种方式所需要的时间是不同的,那么好的算法呢就是时间越短越好,所以,第二种方式,它就是一种好的算法。对于上面的输出的时间,还和系统硬件有一定关系,如果是同等条件下,时间越少,算法越精致。
对于C语言来讲,其实C语言是一个很标准的语言,但是就是由于太过于标准了,所以有些实现会很麻烦,那么开发人员这个时候脑洞打开,让C语言在标准的同时,还能拓展和延伸。
#include <stdio.h>
#include <limits.h>
#include <aio.h>
#include <stdlib.h>
int a(int i){
if(i == 1){
printf("退出程序\n");
exit(1);
}else{
return i;
}
}
int main(int argc, const char * argv[]) {
printf("%d\n",INT_MIN);
printf("%d\n",INT_MAX);
int i;
scanf("%d",&i);
printf("a(i) = %d\n",a(i));
exit(0);
}
对于算来讲,在进行算法讲解,我们会依托数据结构来呈现出。本篇文章就告一段落,下篇文章,我们就深入的去学习常见数据结构类型。本篇文章如果有错,欢迎大家指正,非常感谢。