设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).... ???如果不是,请帮我正确验证。
答案 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