Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time complexity 你能找到这段代码的时间复杂度吗?_Time Complexity - Fatal编程技术网

Time complexity 你能找到这段代码的时间复杂度吗?

Time complexity 你能找到这段代码的时间复杂度吗?,time-complexity,Time Complexity,我试图找到答案,但我的答案与课文中的答案不符 有人能解释一下我的时间复杂性吗 for (int i=0; i<n; i++) for (int j=i; j< i*i; j++) if (j%i == 0) { for (int k=0; k<j; k++) printf("*"); } for(int i=0;我能告

我试图找到答案,但我的答案与课文中的答案不符

有人能解释一下我的时间复杂性吗

for (int i=0; i<n; i++)
        for (int j=i; j< i*i; j++)
            if (j%i == 0)
            {
                for (int k=0; k<j; k++)
                    printf("*");
            }
for(int i=0;我能告诉我如何找到时间复杂度吗?
实验数据不支持被引用的
O(N^5)
的张贴声明。

最好从低规模的实验开始:

for (         int aScaleOfBigO_N  =          1;
                  aScaleOfBigO_N <  2147483646;
                  aScaleOfBigO_N *=          2
                  ){        
    printf( "START: running experiment for a scale of N( %d ) produces this:\n",
                  aScaleOfBigO_N
                  );
    int letsAlsoExplicitlyCountTheVisits = 0;
    for (     int i = 0; i <  aScaleOfBigO_N; i++ )
        for ( int j = i; j <  i*i;            j++ )
            if (  j % i == 0 )
            {
                for ( int k = 0; k < j; k++ )
                {
                 // printf( "*" );                       // avoid devastating UI
                    letsAlsoExplicitlyCountTheVisits++;
                }
            }
    printf( "  END: running experiment visits this many( %d ) times the code\n",
                   letsAlsoExplicitlyCountTheVisits
                   );
}

  • f(n)
    为从外部循环聚合的操作数
  • g(n)
    为在第一个内部循环级别聚合的操作数
  • h(n)
    为在第三个(最内部)循环级别执行的操作数
查看最内部的循环

for (int k=0; k<j; k++)
   printf("*");
所以

g(i)=和(j=i,j+Inf

=>f(n)=和(i=0,iYes。你能展示你尝试过的东西吗?请一遍又一遍,如果你有问题,请提供你的代码。可能重复你的答案以及你是如何得出答案的?文本中的解决方案是什么?幸运的是,这段代码衡量了它自身的复杂性。尝试不同的
n
,计算星号,然后看看你是否能找到一个关联。正文中的解决方案是O(n^5)。非常感谢你,我被这个问题难住了
for (int k=0; k<j; k++)
   printf("*");
j = 1.i
j = 2.i
j = 3.i
...
j = (i-1).i
g(i) = sum(j=i, j<i^2, h(j) if j%i=0, else 0)
     = h(i) + h(2.i) + ... + h((i-1).i)
     = i + 2.i + ... + (i-1).i
     = i.(1 + 2 + ... + i-1) = i.i.(i-1)/2
     = 0.5i^3   // dropped the term -0.5i^2 dominated by i^3 as i -> +Inf

=> f(n) = sum(i=0, i<n, g(i))
        = sum(i=0, i<n, 0.5i^3)
       <= sum(i=0, i<n, 0.5n^3)
       <= 0.5n^4

=> f(n) = O(n^4)