分析代码片段的复杂性

时间:2013-10-27 07:13:14

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

设A是一个数组[1..n],其中包含0和1。 func()是函数,其复杂度为theta(m)。对于给定的伪代码,什么会是复杂吗?

  counter=0;
    for(i=0;i<n;i++)
       {
          if(a[i]==1)
           counter++;
         else
           func();
   }

对我来说,最多n次调用函数func()的最坏情况是当数组完全用零填充时。 因此,func()的θ表示为theta(m)

上面代码的复杂性是:theta(mn).... ???如果不是,请帮我正确验证。

1 个答案:

答案 0 :(得分:0)

上述代码的时间复杂度为 O(mn)(Big O mn)
为什么吗
正如你所说的func()是theta(m) 现在,在计算时间复杂度时,正如您自己所说,当 func被调用n次时,最差情况会导致O(mn)。
为什么不Theta(mn)
Theta对时间复杂性的约束更紧密。它不仅意味着它总是在最坏的mn *下执行,而且最多也是mn *(*给出或取乘数或加法常数)。因此它与输入成比例增加。但是我们不能保证omega(mn)的下限(a.k.a omega) Go here to find more information on big O vs vs Big Theta

你应该能够回答为什么我们不能自己低估Theta(mn)的下限。

Best,Digvijay