【发布时间】:2019-02-05 04:07:52
【问题描述】:
假设我有一个嵌套的 for 循环和 if-checks,如下所示,如果我想查看特定的 for-loop 或 if-check 完成执行需要多少时钟周期(最终是多少秒)。
内部for循环和if-check占用的时钟周期(秒)总和是否应该等于(或近似等于)最外面的for循环占用的时钟周期(秒)数。 ?
还是我做错了?如果有其他方法,我如何为循环计时?
注意:我有 3 个不同的函数做几乎相同的事情,我已经声明了 3 个不同的函数来分别测量每个 for 循环或 if-check,因为如果我尝试获取所有子组件的执行时间同一段代码,那么外部for循环占用的时钟周期数(秒)将包括一些额外的指令执行,这些指令计算内部for循环的时钟周期计数和我猜的if-check。
void fun1(){
int i=0,j=0,k=0;
clock_t t=0,t_start=0,t_end=0;
//time the outermost forloop
t_start = clock();
for(i=0;i<100000;i++){
for(j=0;j<1000;j++){
//some code
}
if(k==0){
//some code
}
}
t_end = clock();
t=t_end-t_start;
double time_taken = ((double)t)/CLOCKS_PER_SEC;
printf("outer for-loop took %f seconds to execute \n", time_taken);
}
void fun2(){
int i=0,j=0,k=0;
clock_t t2=0,t2_start=0,t2_end=0;
for(i=0;i<100000;i++){
//time the inner for loop
t2_start=clock();
for(j=0;j<1000;j++){
//some code
}
t2_end=clock();
t2+=(t2_end-t2_start);
if(k==0){
//some code
}
}
double time_taken = ((double)t2)/CLOCKS_PER_SEC;
printf("inner for-loop took %f seconds to execute \n", time_taken);
}
void fun3(){
int i=0,j=0,k=0;
clock_t t3=0,t3_start=0,t3_end=0;
for(i=0;i<100000;i++){
for(j=0;j<1000;j++){
//some code
}
//time the if check
t3_start=clock();
if(k==0){
//some code
}
t3_end=clock();
t3+=(t3_end-t3_start);
}
double time_taken = ((double)t3)/CLOCKS_PER_SEC;
printf("if-check took %f seconds to execute \n", time_taken);
}
【问题讨论】:
-
你做错了吗?这取决于你的目标是什么。在许多情况下,Big O(代码的时间复杂度)比原始速度更重要。
-
OT:为了便于阅读和理解;一致地缩进代码。在每个左大括号“{”后缩进。在每个右大括号 '}' 之前取消缩进。建议每个缩进级别为 4 个空格,(不是制表符)
标签: c