这个嵌套循环将以数学方式运行多少次?

时间:2014-12-20 11:11:02

标签: c++ time-complexity

我试图弄清楚这个嵌套循环的运行次数,数学

//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

在计算总迭代次数时我做错了什么?

- 谢谢:))

编辑:我已经发布了答案。

3 个答案:

答案 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

使用算术序列公式计算简单计算内循环的迭代次数。

内循环迭代系列及其总和为:

1 + 2 + 3 + .... + n = n(n + 1)/2

这将给出嵌套循环的总迭代次数。

方法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