Gov*_*are 0 algorithm time-complexity asymptotic-complexity data-structures
我在这里几个问题考虑以下循环(让N = 8)
for(int i=1;i<N/2;i++){
// this is O(logN)
}
Run Code Online (Sandbox Code Playgroud)
N/2 = 4但是log(8)= 3(考虑基数为2)那么为什么上面的循环被认为是O(logN)
以及O(loglogN)循环如何?
PS:对不起我糟糕的数学概念
O(log n) 环:
for (i = 1; i <= n; i *= 2)
Run Code Online (Sandbox Code Playgroud)
所以你i在每一步都加倍.基本上:
O(n)O(log n)O(log log n)乘法后会发生什么?幂.所以这将是O(log log n):
for (i = 2; i <= n; i *= i) // we are squaring i at each step
Run Code Online (Sandbox Code Playgroud)
注意:你的循环O(n)不是O(log n).与上述increment / double / exponentiate想法保持一致,您可以使用增量重写循环:
for(int i = 1; i < n; i += 2)
Run Code Online (Sandbox Code Playgroud)
即使你增加更多,它仍然是增量,但仍然O(n).