开发者

question about algorithm complexity

i have tried implement two methods recursive and dynamic method and both took 0 second it means that no one is better in my computer or something is wrong in code? here is these methods

1// recursive

#include <stdio.h>
#include <time.h>
#include <iostream>
using std::cout;
void print(int  n){

    if (n<0)  return ;
    cout<<n<<" ";

    print(n-1);

}
int main(){
    int n=10;
    time_t  start,end;
    double dif;
    time(&start);
    print(n);
    time(&end);
    dif=difftime(end,start);
    printf("it took you %.21f seconds ",dif);

     return 0;
}

2.second method

#include <iostream>
#include <stdio.h>
#include <time.开发者_StackOverflowh>
using namespace std;
void print (int n){
    if (n<0) return ;
     while (n>=0){
         cout<<n--<<endl;
     }



}
int main(){
    int n=10;
    double dif;
    time_t start,end;
    time(&start);

    print(n);
    time(&end);
    dif=difftime(end,start);
    printf("it took you %.21f seconds",dif);

 return 0;

}


A second clock resolution is not suitable for measuring such fast operations.

I suggest you execute your code many times (something like 1 million times; use a for loop for this), estimate the overall time and then compute an average value.

This way you'll get more reliable results.

Just a quick note: I see you use cout in your functions. This is a bad idea: cout and usually most I/O operations are slow regarding to other operations. It is likely that your functions will spend most of their time to print the value, instead of computing it.


The time taken by both functions is smaller than the timer resolution, which is why you're measuring 0 seconds.

Asymptotically, both functions have a time complexity of O(n).


When testing, you need to loop your function 100.000 times or so and measure the whole loop time. Then you will be able to see some reliable results.


For a thorough performance measurement you have to repeat the tested function, preferably with repeatably randomized inputs so often that you achieve a running time that is withing your measurement resolution. Then, repeat the measurements a couple of times, remove the outliers and average over the remaining values. Now you should have solid numbers to look at.


Also gettimeofday() returns time in microseconds.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜