【问题标题】:What should be the time complexity of the following loops?以下循环的时间复杂度应该是多少?
【发布时间】: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


【解决方案1】:

在第一种情况下,您的假设是正确的。时间复杂度为 O(sqrt(n))。我们不考虑增量器 +=2 来计算时间复杂度,因为我们只采用最高幅度的修改器,在本例中为 i*i

在第二种情况下,你是对的。但是,请注意循环从 i=0 开始,并且由于此变量的增量是使用 i*=2 完成的,因此它将永远保持在值 0,因为 0*2 = 0。

【讨论】:

  • 谢谢。如果循环以 1 开头,那么我的答案是否正确?
  • 是的,会的。尽管我会将 i * i
猜你喜欢
  • 2015-12-21
  • 2019-11-16
  • 2015-12-01
  • 1970-01-01
  • 2017-09-04
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多