程序运行的时间复杂度在很多时候被用来衡量一个程序的可行性。除了宏观计算O(n)外,简单的程序自己也能提供其运行的时长。
1.简单的方法是,在C/C++中,简单的就是,time.h,中的函数 clock_t 类型的变量接受 clock()函数的赋值,eg.
#include
#include
#include
int main()
{
clock_t start,finish;
int sum=0,i;
start=clock();
for(i=3;i<1000;i++)
if(i%3==0||i%5==0)
sum+=i;
printf("%dn",sum);
finish=clock();
printf("lasts for %llf secondsn",(long double)(finish-start)/CLOCKS_PER_SEC);
}
2,这种方法精确到1E-6,利用 sys/time.h 中的 gettimeofday() 函数获取当前时钟,它精确到ms,普遍的用法是:
#include
#include
double getTimeval()
{
struct timeval stTimeval;
gettimeofday(&stTimeval,NULL);
return stTimeval.tv_sec+(double)stTimeval.tv_usec*1E-6;
}
int main()
{
double T1,T2;
long long int i,sum=0;
long long int fa[100000]={0};
T1=getTimeval();
fa[0]=fa[1]=1;
for(i=1;fa[i+1]<4000000;i++)
{
fa[i+2]=fa[i+1]+fa[i];
if(fa[i+2]%2==0)
sum+=fa[i+2];
}
printf("%lldn",sum);
T2=getTimeval();
printf("Time result tested by gettimeofday= %10.30fn",
(double)(T2-T1));
return 0;
}
3,通过测试另外的时间调用结果:
#include
#include
#include
#include
#include
#define TEST_BY_CLOCK (char)(0x00)
#define TEST_BY_TIMES (char)(0x01)
#define TEST_BY_GETTIMEOFDAY (char)(0x02)
#define TEST_BY_GETRUSAGE (char)(0x03)
#define TEST_METHOD (TEST_BY_GETTIMEOFDAY)
#define COORDINATION_X (int)(1024)
#define COORDINATION_Y (int)(1024)
static int g_Matrix[COORDINATION_X][COORDINATION_Y];
double getTimeval()
{
struct rusage stRusage;
struct timeval stTimeval;
if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {
gettimeofday(&stTimeval, NULL);
} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {
getrusage(RUSAGE_SELF, &stRusage);
stTimeval = stRusage.ru_utime;
}
return stTimeval.tv_sec + (double)stTimeval.tv_usec*1E-6;
}
int main()
{
int i, j;
int n = 0;
clock_t clockT1, clockT2;
double doubleT1, doubleT2;
if (TEST_METHOD == TEST_BY_CLOCK) {
clockT1 = clock();
} else if (TEST_METHOD == TEST_BY_TIMES) {
times(&clockT1);
} else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {
doubleT1 = getTimeval();
} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {
doubleT1 = getTimeval();
}
for (i = 0; i < COORDINATION_X; i++) {
for (j = 0; j < COORDINATION_Y; j++) {
g_Matrix[i][j] = i * j;
}
}
if (TEST_METHOD == TEST_BY_CLOCK) {
clockT2 = clock();
printf("Time result tested by clock = %10.30fn",
(double)(clockT2 - clockT1)/CLOCKS_PER_SEC);
} else if (TEST_METHOD == TEST_BY_TIMES) {
times(&clockT2);
printf("Time result tested by times = %10.30fn",
(double)(clockT2 - clockT1)/sysconf(_SC_CLK_TCK));
} else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {
doubleT2 = getTimeval();
printf("Time result tested by gettimeofday = %10.30fn",
(double)(doubleT2 - doubleT1));
} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {
doubleT2 = getTimeval();
printf("Time result tested by getrusage = %10.70fn",
(double)(doubleT2 - doubleT1));
}
return 0;
}
比较后得出结果,对精度要求不高或程序运行时间比较长的情况下,clock()函数是个不错的选择,而对于精度要求较高时,gettimeofday() , getusage() 的结果似乎差不多。这就根据自己的爱好去使用了!
</div>
1.简单的方法是,在C/C++中,简单的就是,time.h,中的函数 clock_t 类型的变量接受 clock()函数的赋值,eg.
#include
#include
#include
int main()
{
clock_t start,finish;
int sum=0,i;
start=clock();
for(i=3;i<1000;i++)
if(i%3==0||i%5==0)
sum+=i;
printf("%dn",sum);
finish=clock();
printf("lasts for %llf secondsn",(long double)(finish-start)/CLOCKS_PER_SEC);
}
2,这种方法精确到1E-6,利用 sys/time.h 中的 gettimeofday() 函数获取当前时钟,它精确到ms,普遍的用法是:
#include
#include
double getTimeval()
{
struct timeval stTimeval;
gettimeofday(&stTimeval,NULL);
return stTimeval.tv_sec+(double)stTimeval.tv_usec*1E-6;
}
int main()
{
double T1,T2;
long long int i,sum=0;
long long int fa[100000]={0};
T1=getTimeval();
fa[0]=fa[1]=1;
for(i=1;fa[i+1]<4000000;i++)
{
fa[i+2]=fa[i+1]+fa[i];
if(fa[i+2]%2==0)
sum+=fa[i+2];
}
printf("%lldn",sum);
T2=getTimeval();
printf("Time result tested by gettimeofday= %10.30fn",
(double)(T2-T1));
return 0;
}
3,通过测试另外的时间调用结果:
#include
#include
#include
#include
#include
#define TEST_BY_CLOCK (char)(0x00)
#define TEST_BY_TIMES (char)(0x01)
#define TEST_BY_GETTIMEOFDAY (char)(0x02)
#define TEST_BY_GETRUSAGE (char)(0x03)
#define TEST_METHOD (TEST_BY_GETTIMEOFDAY)
#define COORDINATION_X (int)(1024)
#define COORDINATION_Y (int)(1024)
static int g_Matrix[COORDINATION_X][COORDINATION_Y];
double getTimeval()
{
struct rusage stRusage;
struct timeval stTimeval;
if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {
gettimeofday(&stTimeval, NULL);
} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {
getrusage(RUSAGE_SELF, &stRusage);
stTimeval = stRusage.ru_utime;
}
return stTimeval.tv_sec + (double)stTimeval.tv_usec*1E-6;
}
int main()
{
int i, j;
int n = 0;
clock_t clockT1, clockT2;
double doubleT1, doubleT2;
if (TEST_METHOD == TEST_BY_CLOCK) {
clockT1 = clock();
} else if (TEST_METHOD == TEST_BY_TIMES) {
times(&clockT1);
} else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {
doubleT1 = getTimeval();
} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {
doubleT1 = getTimeval();
}
for (i = 0; i < COORDINATION_X; i++) {
for (j = 0; j < COORDINATION_Y; j++) {
g_Matrix[i][j] = i * j;
}
}
if (TEST_METHOD == TEST_BY_CLOCK) {
clockT2 = clock();
printf("Time result tested by clock = %10.30fn",
(double)(clockT2 - clockT1)/CLOCKS_PER_SEC);
} else if (TEST_METHOD == TEST_BY_TIMES) {
times(&clockT2);
printf("Time result tested by times = %10.30fn",
(double)(clockT2 - clockT1)/sysconf(_SC_CLK_TCK));
} else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {
doubleT2 = getTimeval();
printf("Time result tested by gettimeofday = %10.30fn",
(double)(doubleT2 - doubleT1));
} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {
doubleT2 = getTimeval();
printf("Time result tested by getrusage = %10.70fn",
(double)(doubleT2 - doubleT1));
}
return 0;
}
比较后得出结果,对精度要求不高或程序运行时间比较长的情况下,clock()函数是个不错的选择,而对于精度要求较高时,gettimeofday() , getusage() 的结果似乎差不多。这就根据自己的爱好去使用了!
</div>
分析预测模型在机器学习中的应用之线性回归
回归能做任何事情 Continue reading