Lov*_*ngh 0 c++ time complexity-theory
这段代码的时间复杂度是多少?
for(int i = 1 ; i <= b ; ++i )
for(int j = i ; j <= b ; j += i )
Run Code Online (Sandbox Code Playgroud)
您可以将循环展开为以下内容:
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)
Run Code Online (Sandbox Code Playgroud)
这扩展为以下形式的总和:
b + b/2 + b/3 + … + b/b = b * (1 + 1/2 + 1/3 + … + 1/b)
Run Code Online (Sandbox Code Playgroud)
你可能认识到第二个因素是谐波系列.然后,使用以下SO答案的结果:找到Harmonic Series的Big O,你可以获得嵌套循环的大哦:
O(b * log(b))
Run Code Online (Sandbox Code Playgroud)