| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:弱弱地问一个问题
取消只看楼主 加入收藏
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
弱弱地问一个问题
计算某个程序的运行时间,不太明白clock()函数的运作机制,百度找不到满意的答案。
看以下两段代码:
程序代码:
#include<cstdio>
#include"time.h"

void main()
{
    int a=10;
    clock_t s,e;
    s=clock();
    
    printf("%d\n",a);
    e=clock();
    printf("%f\n",(double)(e-s)/CLOCKS_PER_SEC);
}

程序代码:
#include<cstdio>
#include"time.h"

void main()
{
    
    clock_t s,e;
    s=clock();
    int a=10;
    printf("%d\n",a);
    e=clock();
    printf("%f\n",(double)(e-s)/CLOCKS_PER_SEC);
}

两段代码,只是int a=10;这行代码的位置不一样,但是运行出来的结果却不一样。
另外,(e-s)/CLOCKS_PER_SEC这个表达式得出的结果是什么类型的数据?其单位是按秒计算、还是按毫秒计算的?
搜索更多相关主题的帖子: include 百度 double 
2013-10-31 12:37
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 3楼 yuccn
GetTickCount的精准度有多高?
其实我就是不太了解C标准库函数的time.h的clock()函数,在C标准库函数中的介绍是:从程序开始运行经过的时间,如果系统没有内部时钟则返回-1.
这样我就不理解究竟这个函数的返回值是一个什么类型的数据了,并且,计算时间差的时候,还要除于一个常量CLOCKS_PER_SEC。
这个常量的定义是:#define CLOCKS_PER_SEC 1000
这样的话,除于这个1000,得出来的数值是按秒来计算么?如果想转化为毫秒,该用什么来计算。这就是我的一些疑问

思考赐予新生,时间在于定义
2013-10-31 13:34
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
调试了一下以下的代码,我也觉得这个clock函数并不能在每次运行时计算出同样的时间。
使用VS2012,我发现每次按ctrl+F5运行的时候,得到的时间值都是不同的。
再调试一下,终于知道clock_t 是long int,除于常量CLOCKS_PER_SEC 得到的值的单位就是秒,再转换成double类型输出。

不过这样的测定程序运行时间似乎不准确,每次运行时得到的时间值都不一样。但代码固定是那些不变了的,编译器每次执行
它们的需要时间应该也是不变的吧,那为何会得到不同的运行时间值?

像ACM竞赛题目,它的要求都是time limit:XXX ms, memory limit: XXX kb
在这里,他们是如何计算参赛者的程序代码的时间复杂度?
程序代码:
#include<cstdio>
#include"time.h"
void main()
{
    int a=10;
    double x;
    clock_t s,e;
    s=clock();

    printf("%d\n",a);
    e=clock();
    x=(double)(e-s)/CLOCKS_PER_SEC;
    printf("%f\n",x);
}


 

思考赐予新生,时间在于定义
2013-10-31 14:12
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
之所以现在在根究这个如何测定程序代码运行所需的时间的问题,是因为我现在在设计一些算法,求最优二叉树,遍历二叉树结点的算法,

写出了几种算法,放在VS中运行,结果是一样的,压根看不出哪个算法的时间用得最少,所以才想弄清楚怎么测定一段程序代码的运行时间

思考赐予新生,时间在于定义
2013-10-31 14:18
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
按照1s大概能忍受10^9 --10^10的时间复杂度,一个函数里面只需要算出时间复杂度即可大概估算运行时间。

有没有更直接一点的方法?比如说:在程序代码中添加一些其他什么计时函数,使其在程序运行过程中自动计算出相对比较准确的运行时间值。
这样比较直观一点吧。

如果我新设计了一个算法,想知道这个算法的运行时间,就要计算时间复杂度,估算大概的运行时间,这样会不会麻烦了一点?

思考赐予新生,时间在于定义
2013-10-31 14:46
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 14楼 TonyDeng
《算法導論》这本书我没有,现在对算法的了解还是比较肤浅的

思考赐予新生,时间在于定义
2013-10-31 18:26
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 16楼 tlliqi
正有此意,这本书是不是叫《算法导论》?繁体字我不太看得懂

思考赐予新生,时间在于定义
2013-10-31 19:13
快速回复:弱弱地问一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016266 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved