【问题标题】:Time complexity of Loops with If statements带有 If 语句的循环的时间复杂度
【发布时间】:2020-05-01 09:16:07
【问题描述】:

如果我有这样的循环:

for(int i=0;i<n;i++)
{
    if(i%2==0)
    {
        // do something
    }
}

如果 // do something 代码的时间复杂度是线性的,那么时间复杂度是多少。

【问题讨论】:

  • if 对复杂性类没有影响,因为它在 O(1) 本身中执行,只会将 // do something 的执行减少一半。如果您查看 big-o 的数学定义,常量因子不会起作用,因此 0.5 不会改变此代码在 O(n * k) 中运行的事实,其中 k// do something 的复杂度。

标签: algorithm time complexity-theory


【解决方案1】:

当您谈论时间复杂度时,您通常会谈论最坏的情况,因此您认为if 中的条件为真,然后决定复杂度。

在给定的伪代码中,do something 被执行了一半,所以O(n/2) =&gt; O(n) 次。所以do something 被执行了 O(n) 次。如果do something 是线性时间,那么代码 sn-p 的复杂度是O(n^2)

【讨论】:

    【解决方案2】:

    if 语句在每次迭代中执行,并且是恒定时间。假设受保护的代码是线性的。它将执行一半的时间,但是由于大 O 表示法的工作原理,这个 1/2 的因子会下降。因此,总时间复杂度是二次的,即O(n*n)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2020-09-16
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多