时间复杂度n ^ 2

时间:2019-04-03 05:45:58

标签: c++ time-complexity

是O(N ^ 2)还是O(nlogn)。有嵌套循环时,它不是n ^ 2吗?

(\d{10}(?!.*\d{10}))

2 个答案:

答案 0 :(得分:5)

这是O(N log N),因为外循环在每次迭代中将i的值加倍。因此,外部循环的复杂度是O(log N)而不是O(N)

如果您使用i++或类似的名称而不是i=2*i,那么两个循环的时间复杂度将为O(n^2)

编辑:这是一个简化的分析。请参阅answer from R Sahu进行更严格的分析。

答案 1 :(得分:3)

  

是O(N ^ 2)还是O(nlogn)。

都不是。

  

有嵌套循环时,它不是n ^ 2吗?

当您线性遍历项目时,这是正确的。在您的情况下,这是不正确的。

就您而言...

i的值为:1 2 4 8 16 ... N

内部循环执行2 + 4 + 8 + 16 + 32 ... N次。

那是一个几何级数。几何级数的总和为a(1 - r^n)/(1 - r)

在您的情况下,a2r2,而nlog2(N)(以2为底的对数)。因此,经过简化后的总和为2*2^(log2(N)),与2*N相同。

即您的算法复杂度为O(N)

感谢@LedHead纠正了初始帖子中的错误。