我无法确定以下碎片代码的重要符号,给定的表达式是我想弄清楚的一部分。我知道给出两个简单的默认for
循环导致O(n^2)
,但后者完全不同。以下是说明。
的算法
for (j = 0; j < n; j++)
{
for (k = j; k < n; k++)
{
}
}
将导致表达式给出的多次迭代:
= n + (n-1) + (n-2) + (n-3) + ........ + (n - n)
将上述系列表达式减少为代数表达式,无需求和。
确定代数表达式后,表达Big O表示法中的表现。
答案 0 :(得分:4)
你可以使用这种方法(据说当他是一个小伙子时由高斯应用)。
如果将所有数字相加两次,则
bytes
因此,
1 + 2 + 3 + ... + n
+ n + (n-1) + (n-2) + ... + 1
—————————————————————————————————————--
(n+1) + (n+1) + (n+1) + ... + (n+1) = n(n+1)
且1 + 2 + 3 + ... + n = n(n+1)/2
为n(n+1)/2
,因此位于(n^2)/2 + n/2
。