我试图弄清楚这个嵌套循环的运行次数,数学。
//Nested Loop (A)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
我知道这个循环会运行((n)(n + 1))/ 2。但是,当我试图用数学方法计算它时,结果似乎变得不同了。
例如:
//<This nested loop will run m x n times.
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
在嵌套循环(A)中:
for(int i = 1; i <= n; i++) //<this outer loop will run n times.
现在可以看出内循环将运行i次:
for(int j = 1; j <= i; j++)
在每次迭代中,i的值都不同。
我尝试使用公式来查找算术系列的总和:
1 + 2 + 3 + .... + n = (n(n + 1))/2
但结果是:
outer loop's iteration = n
inner loop's iteration = (n ( n + 1 ) ) / 2
total iterations = n ( n ( n + 1 ) ) / 2
= n ^ 2 ( n + 1 ) / 2 ///< which is WAY MORE than n ( n + 1 ) / 2
在计算总迭代次数时我做错了什么?
- 谢谢:))
编辑:我已经发布了答案。
答案 0 :(得分:1)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
对于i = n的每个值,内循环将执行'n'次。这意味着内循环执行的次数是: -
n * (n + 1)/2
与迭代总数相同。
答案 1 :(得分:1)
我自己想出来了。
我使用算术系列公式的总和来计算它的(内部循环)“总”迭代次数,在这种情况下实际上为我提供了嵌套循环的总迭代次数。
这两种方法都应该提供正确答案:
使用算术序列公式计算简单计算内循环的迭代次数。
内循环迭代系列及其总和为:
1 + 2 + 3 + .... + n = n(n + 1)/2
这将给出嵌套循环的总迭代次数。
for(int i = 1; i <= n; i++) //< This will run 'n' times
我们发现这个平均迭代次数:
for(int j = 1; j <= i; j++) //< Average = (n + 1)/2
所以现在嵌套循环的迭代总数= n *(n + 1)/ 2
答案 2 :(得分:0)
无限次
因为j = n在所有情况下都相当于1。
如果你的意思是j == n它会看起来像这样......
1 2 3 4 5 2 3 4 5 3 4 5 4 5 5
该函数称为自然数之和5 + 4 + 3 + 2 + 1 = 15
这意味着它将是N(N + 1)* 2时间复杂度。
N(N + 1)* 2 5 + 4 + 3 + 2 + 1 = 5 * 6 * 2 = 15