此代码的时间复杂度是多少?
for(int i = 1 ; i <= b ; ++i )
for(int j = i ; j <= b ; j += i )
答案 0 :(得分:6)
您可以将循环扩展为以下内容:
i = 1 ——> 1,2,3,…,b b
i = 2 ——> 1,3,5,…,b (b/2)
i = 3 ——> 1,4,7,…,b (b/3)
i = 4 ——> 1,5,9,…,b (b/4)
…
i = b ——> 1, b (b/b = 1)
这扩展为以下形式的总和:
b + b/2 + b/3 + … + b/b = b * (1 + 1/2 + 1/3 + … + 1/b)
您可能会将第二个因素识别为Harmonic Series。然后,使用以下SO答案的结果:Finding Big O of the Harmonic Series您可以获得嵌套循环的大哦:
O(b * log(b))