【问题标题】:is this program quadratic or linear?这个程序是二次的还是线性的?
【发布时间】:2015-10-04 13:56:40
【问题描述】:

我有以下伪代码:

for i=1 to 3*n
         for j=1 to i*i
                for k=1 to j
                    if j mod i=1 then
                         s=s+1
                    endif
                next k
         next j
next i

当我想分析部分 s=s+1 被执行的次数时,假设这个操作需要恒定的时间,我最终会得到二次复杂度还是线性? n 的值可以是任意正整数。

我的计算如下:

【问题讨论】:

  • 是否假定比较if j mod i=1 的成本可以忽略不计?
  • 关于什么?就程序而言,n 是这里唯一的“变量”吗?
  • @Thilo - 不,你错过了。应该是 O(n^5)。

标签: algorithm time-complexity


【解决方案1】:

绝对不是二次的,但至少应该是多项式的。

它经过 3n 次迭代。

在每次迭代中,它会多做 9n2 个。

在每一个上,它最多可以增加 9n2 个。

所以我认为它会是 O(n5)。

【讨论】:

    【解决方案2】:

    在谈论运行时间时,您应该始终明确说明您定义的运行时间。

    如果我们假设您用 n 来谈论您的运行时间,那么答案是 O(n^5)。这是因为当我们摆脱恒定因素时,您所做的事情归结为这一点:

    do n times:
       do n^2 times:
           do n^2 times:
               do something
    

    还有n * n^2 * n^2 = n^5

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2016-05-15
      相关资源
      最近更新 更多