C 如何找到总运行时间?

C 如何找到总运行时间?,c,C,如何找到以下代码段的总体运行时间 for (i = 0; i < n; i++) for (j = 0; j < n; j++) for (k = 1; k < n; k = k * 2) printf("Test") for (i = 0; i < n ^ 2; i++) for (j = 1; j < n; j = j * 2) printf("Test") 如何找到以下代码段的总体运行

如何找到以下代码段的总体运行时间

for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
        for (k = 1; k < n; k = k * 2)
            printf("Test")

for (i = 0; i < n ^ 2; i++)
    for (j = 1; j < n; j = j * 2)
        printf("Test")

如何找到以下代码段的总体运行时间

for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
        for (k = 1; k < n; k = k * 2)
            printf("Test")

for (i = 0; i < n ^ 2; i++)
    for (j = 1; j < n; j = j * 2)
        printf("Test")

forj=0;j在程序开始和结束时设置时钟,并打印两个值之间的差值

假设以下示例:

#include <stdio.h>
#include <time.h>

int main(void) {
    clock_t begin = clock();

    // program here

    clock_t end = clock();
    double spent = (double) (end - begin) / CLOCKS_PER_SEC;

    printf("%lf\n", spent); // to get the total execution time
}

两个代码片段中的内部循环是相同的:它打印测试日志2n次

在第一种情况下,该内部循环执行n*n+1/2次

假设符号n^2实际上表示n*n,则在第二种情况下,内部循环执行n*n

在这两种情况下,时间复杂度是相同的:On2.logn

运行时间可以与迭代次数成比例,第一种情况为n*n+1/2*log2n,第二种情况为n*n*log2n,其中log2n是基2中的整数log,即:n中最高有效位的位置

实际上,您应该使用时钟或gettimeofday在目标系统上测量运行时间。

您确定n^2吗?也许是n*n?我通常使用时钟在测试代码前后制作时间戳。如果执行时间太短而没有意义,我会将要测试的代码放在另一个循环中。