双循环与操作数之间的关系

时间:2013-05-09 02:13:03

标签: algorithm

我的老师告诉我,基本上每当我们有一个循环和一个嵌套循环时,操作次数如下n(n + 1)/ 2.

然而,我查看了一些程序,我意识到情况不太可能。

for(i=0, i<n, n++)
 for(j=i, j<n, j++)
 {x=i+j}

在这种情况下它将是n(n + 1)/ 2,忽略i = 0,j = 0,n ++,j ++和x = i + j,但是这里:

for(i=0, i<n, n++)
 for(j=0, j<n, j++)
 {x=i+j}

除非我弄错了,否则它将是n ^ n。

有人能告诉我两个循环何时有n(n + 1)/ 2个操作次数?我现在有点困惑。

3 个答案:

答案 0 :(得分:1)

在您的第一个示例中,操作将完成n次,然后n-1次,然后n-2次。如果我没记错的话,这是n(n-1)/2,但你可能是对的,它是n(n+1)/2。无论哪种方式,这都是一个非常小的差异。

在您的第二个示例中,它将完成n次,然后n次,然后n次......直到您完成n次{ {1}}次 - 换句话说,n

答案 1 :(得分:0)

你可能误解了老师(或老师犯了错误)。 n(n-1)/2只是公共循环运行时的一个示例。它可以是你所观察到的任何东西。您的第二个示例有n^2个操作,另一个常见模式。 'n ^ n'非常罕见。

答案 2 :(得分:0)

for(i=0, i<n, n++)
 for(j=0, j<n, j++)
 {x=i+j}

第一个循环运行n次,每次迭代运行第二个循环n次,因此你有n*n = n^2

for(i=0, i<n, n++)
 for(j=i, j<n, j++)
 {x=i+j}

第一个循环运行n次,每次迭代运行第二个循环(n-i)次....因此x=i+j执行的次数为1 + 2 + 3 ..... + n次,此序列是第一个n整数的总和,与n(n+1)/2

相同