是O(N ^ 2)还是O(nlogn)。有嵌套循环时,它不是n ^ 2吗?
(\d{10}(?!.*\d{10}))
答案 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)
。
在您的情况下,a
是2
,r
是2
,而n
是log2(N)
(以2为底的对数)。因此,经过简化后的总和为2*2^(log2(N))
,与2*N
相同。
即您的算法复杂度为O(N)
。
感谢@LedHead纠正了初始帖子中的错误。