【发布时间】:2021-03-16 07:15:26
【问题描述】:
请检查以下时间复杂度是否正确。
循环 1
for(int i =0; i*i < n; i+=2)
我认为在这个循环中完成的工作将是 O(sqrt(n)) 因为我知道当我达到 sqrt(n )。此外,增量器 (i +=2) 将导致结果在 n/2 内完成,因此完成的整体工作将是 sqrt(n)/2。
循环 2
for(int i =0; i*i < n; i*=2)
我认为在这个循环中完成的工作将是 O(log(n)),因为与上一个问题相比唯一改变的是增量器 (i*=2),这将导致循环以 log(n) 次运行。所以整体工作变成 log(sqrt(n)) 变成 O(log(n))
PS:如果有人有各种循环变体或嵌套循环的时间复杂度备忘单,请分享。非常感谢您的帮助。
【问题讨论】:
-
O(log(sqrt(n)))只是O(log(n))。 -
哦,我忘记了日志规则。谢谢,我会编辑问题
标签: loops time-complexity