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)