我在计算内循环中的时间复杂度方面受到了嘲弄。
让我们考虑以下情况。
案例1:
for(int i = 0; i <= n; i++) - O(n)
{
for(int j = 0; j <= i; j++) - O(?);
{
//Some thing goes here
}
}
这里内部循环每次都执行到值i
。
所以,我可以说,内循环的复杂性是O(i)
,
,整体复杂度为O(N) * O(I); ie: O(N*I)
有人可以用一些简短的方式解释,这样我就能理解计算。
感谢。
答案 0 :(得分:2)
总体时间复杂度为 O ( n ²)(事实上,它甚至是Θ( n ²))。
内部循环具有复杂性 O ( i )。但是, n 与 i 有关,所以简单地说整个事情都有复杂性 O ( ni )错误。内环的主体将运行0 + 1 + 2 +⋯+ n =( n ²+ n )/ 2 =Θ( n ²)次。
答案 1 :(得分:1)
在我回答你的要求之前,我将解释一个简单的例子
我们根据最内层循环的执行次数来计算时间复杂度
考虑这种情况:
for(i=0;i<n;i++){
for(j=0;j<n;j++){
....
}
}
这里外循环执行n次,每次迭代内循环执行n次
第一次迭代 - n
第二次迭代 - n
第3次迭代 - n
。
。
。
第n次迭代-n
所以内循环执行n * n次。所以它是O(n ^ 2)
现在我们根据您要求的情况(
for(int i=0;i<=n;i++){
for(int j=0;j<=i;j++){
//Some thing goes here
}
}
这里外循环执行n次。并且在每次迭代中,内循环执行i次
第一次迭代 - 1
第二次迭代 - 2
第3次迭代 - 3
。
。
。
第n次迭代-n
因此,当我们计算它时,它将是
1 + 2 + 3 + ..... + n = n(n + 1)/ 2
这基本上是O(n ^ 2)。 :)