【问题标题】:Find the computational complexity for the following loops找出以下循环的计算复杂度
【发布时间】:2013-11-08 12:42:00
【问题描述】:

For n=1 : Inner loop will execute 1 time.
For n=2 : Inner loop will execute 1+2 times.
For n=4 : Inner loop will execute 1+2+4 times.
For n=8 : Inner loop will execute 1+2+4+8 times.

。 . .

那么我怎样才能找到计算复杂度呢?

我的回答是: 内循环迭代次数 = n+(n/2)+(n/4)+(n/8)+...+(n/n)

【问题讨论】:

  • 不应该是For n=1,2,3,4而不是For n=1,2,4,8吗?然后执行的操作数是 2^n-1?
  • 我选择 n=1,2,4,8... 以便更容易找到复杂性,因为 i=i*2。我不知道!

标签: big-o time-complexity asymptotic-complexity


【解决方案1】:

总时间复杂度为 Θ(n)。要看到这一点,请注意内部循环每次迭代都会做 Θ(i) 工作,并且 i 取值 1、2、4、8、16、32、...、2log n。如果我们总结一下,使用几何级数之和的公式,我们得到

1 + 2 + 4 + 8 + ... + 2log n = 2log n + 1 - 1 = 2 · 2log n - 1 = 2n - 1

所以完成的总功是 Θ(n)。

希望这会有所帮助!

【讨论】:

  • 谢谢。但是为什么 2^logn 不是 n 呢?
  • @ammarx- 假设我们使用以 2 为底的对数,它们是相同的。
【解决方案2】:

您可以像下面这样正式地进行,以获得将要执行的指令的确切数量以及增长顺序:

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多