好的,所以我是分析算法的新手,非常感谢任何有用的提示,可以分享如何解决这个问题。我试图确定计数增加的次数是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++;
}
}
答案 0 :(得分:4)
这种练习的目的是教你如何在纸上分析它而不是在机器上运行它。但让我们来看看模式:
n
次n
次之间运行,具体取决于当时的i
。但是你知道平均来说这会花费(n+1)/2
次。count = n(n+1)/2)
,即O(n^2)
更新:根据要求 - 为什么内部循环为(n+1)/2
:
外部循环将在1和n之间递增i。因此,在外部循环的每次迭代中,内部循环将比以前“循环”一次。
因此内循环将迭代这么多次:
所以我们可以做一些聪明的事情并配对:
由于我们配对了这些,我们有n / 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