【发布时间】:2020-01-04 15:20:25
【问题描述】:
我知道我们将循环计数器减半时的时间复杂度是log n。也就是说,如果我们有以下循环:
for(i=1 ; i<n ; i*=2) { ... }
那么时间复杂度是log n。
不应该将循环计数器i 再次减半给log log n 时间复杂度吗?那就是下面的循环
for(i=1 ; i<n ; i*=4) { ... }
时间复杂度是log log n?
我尝试了n 的一些值:
n = 2^8 = 256
i = 1,4,16,64,256 (5 times)
n = 2^10 = 1024
i = 1,4,16,64,256,1024 (6 times)
n = 2^16 = 65536
i = 1,4,16,64,256,1024,4096,16384,65536 (9 times)
似乎循环体被执行了(log n)/2-1 次。
我对这个分析是否正确并且将循环计数器减半确实仍然给出O(log n) 时间复杂度而不是O(log log n) 时间复杂度?
【问题讨论】: