我的老师告诉我,基本上每当我们有一个循环和一个嵌套循环时,操作次数如下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个操作次数?我现在有点困惑。
答案 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