鉴于以下嵌套循环,我必须弄清楚它的Big O复杂性:
for(i=0 to n)
for(j=n-1;j>=i;j--)
我知道这个的复杂性将是O(n^2)
,但我不确定如何找出内循环的公式。
n=10
i | j | outer iters | inner iters
0 | 9 | 1 | 10
1 | 9 | 2 | 9
...
9 | 9 | 10 | 1
因此,外循环运行n
次,而内循环运行sum(n to n-9)
。
我被告知答案是n(n-2)/2
,而我根本无法弄清楚如何从我拥有的东西中得到这个结论。
非常感谢协助。
答案 0 :(得分:4)
观察外循环每次迭代执行内循环的次数。
When i=0, the inner loop has n iterations.
When i=1, the inner loop has n-1 iterations.
When i=2, the inner loop has n-2 iterations.
......
When i=k, the inner loop has n-k iterations.
.....
When i=n-2, the inner loop has 2 iterations.
When i=n-1, the inner loop has 1 iterations.
因此内循环的迭代总数为1 + 2 + ... +(n-2)+(n-1)+ n,等于n(n + 1)/ 2。 / p>
答案 1 :(得分:1)
将整数1和n相加是众所周知的高斯特里克:
(请注意它是+ 1
,而不是- 2
)
这是一种直观的方式来了解为什么这个公式是正确的:
尝试使用1 + 2 + 3 + 4 + 5 + 6
但是,如果没有偶数条款怎么办?它还能用吗?它适用于任何数量的术语吗?要回答这个问题,我们最能证明这一点 假设:
用一种叫做数学归纳的概念
为此,我们首先需要建立一个基本案例,在本例中为n = 1
,这是非常正确的。
现在,对于归纳步骤。我们假设,我们已经证明了我们对某些n
的假设,基于这些知识,我们希望证明它也适用于n + 1
。如果这成功,我们已经“神奇地”证明了所有自然数字。 为什么?我们已经证明它适用于n = 1
,n => n + 1
步骤意味着现在已经证明n = 2
,这意味着n = 3
也证明了它1}}等等。这是一种多米诺骨牌效应,第一次倾斜将让所有其他人失败(证明)。
在假设中用n
替换n + 1
给出了我们归纳步骤的结果。因此,我们已经证明所有n
的公式都是正确的。
答案 2 :(得分:0)
- 内循环n-1次 第二次迭代 - 内循环n-2次 等等
用于n-1次迭代 - 内部循环1次
总迭代次数=(n-1)+(n-2)+ .. 2 + 1 = n(n-1)/ 2
是n ^ 2-n / 2,属于O(n ^ 2) 因为我们可以把它写成 如果f(n)= n ^ 2-n / 2 和g(n)= n ^ 2
我们可以把它写成 0℃; = F(N)< = C,G(n)的 对于c> 0 n0> 0 这里n大于n0