下面的代码实际上是以O(n ^ 2)为界,有人可以解释一下原因吗?
{{1}}
答案 0 :(得分:4)
这并不是那么棘手。
你的内循环的复杂性形成一个geometric progression,其总复杂度 O(n)。
一直没有填写细节(这看起来像是一个硬件问题),请注意几何序列的公式是
a_0(q ^ k - 1)/ q - 1 ,( a_0 =第一个元素, q =乘法因子, k = num elements)。
这里你的 q ^ k 是 O(n)。
你的外环是 O(n)。
由于它是一个嵌套循环,并且内部术语不依赖于外部索引,因此可以相乘。
答案 1 :(得分:0)
证明是几何级数:)
对于i = n,如果i> 1,内部循环不会执行多次n / 3(因为在下一次迭代中j是> = n)。
因此,对于外循环的2n / 3次迭代,内循环仅迭代一次并执行O(j)操作。因此,对于2n / 3次迭代,复杂度为O(n ^ 2)。
要计算设置n = n / 3的剩余迭代的复杂度,现在应用步骤1,2和3
答案 2 :(得分:0)
有条不紊地使用Sigma表示法,您可以执行以下操作: