确定作为n的函数,执行增加变量计数的语句的频率

时间:2012-11-20 22:45:47

标签: java algorithm nested nested-loops

好的,所以我是分析算法的新手,非常感谢任何有用的提示,可以分享如何解决这个问题。我试图确定计数增加的次数是n的函数。我在ide中运行它,对于值1-7,输出为1,3,6,10,15,21,28。我只是不确定如何写这个作为n的函数?谢谢。 循环如下:

for(int i = 1 ; i <= n ; i++){

    for (int j = 1 ; j <= i ; j++) {

         count++;
    }
}

3 个答案:

答案 0 :(得分:4)

这种练习的目的是教你如何在纸上分析它而不是在机器上运行它。但让我们来看看模式:

  • 外部循环将总共运行n
  • 内部循环将在1到n次之间运行,具体取决于当时的i。但是你知道平均来说这会花费(n+1)/2次。
  • 因此count = n(n+1)/2),即O(n^2)

请参阅arithmetic series

更新:根据要求 - 为什么内部循环为(n+1)/2

外部循环将在1和n之间递增i。因此,在外部循环的每次迭代中,内部循环将比以前“循环”一次。

因此内循环将迭代这么多次:

  • 1 + 2 + 3 + ... + n

所以我们可以做一些聪明的事情并配对:

  • n,其中1:(n + 1)= n + 1
  • n-1,其中2:(n-1)+ 2 = n + 1
  • n-2,其中3:(n-2)+ 3 = n + 1
  • ...

由于我们配对了这些,我们有n / 2个这样的配对:

  • 因此1 + 2 + ... + n的总和是((n + 1)*(n / 2))。
  • 所以平均值为((n + 1)*(n / 2))/ n =(n + 1)/ 2

(当你在长条纸上写1 + 2 + 3 + ... + n时,将其可视化,然后将其折叠成两半。)

我还强烈建议您阅读此famous story about Karl Friedrich Gauss,以便您始终记住如何对算术系列进行求和=)

答案 1 :(得分:1)

1

1 + 2 = 3

1 + 2 + 3 = 6

1 + 2 + 3 + 4 = 10

1 + 2 + 3 + 4 + 5 = 15

只有我才能看到这种模式? : - )

答案 2 :(得分:1)

你走了:

count = n *(n + 1)/ 2