下面代码片段的时间复杂度是多少?

时间:2016-01-03 01:54:17

标签: algorithm asymptotic-complexity

设A [1,... n]是在每个位置存储位(1或0)的数组,f(m)是时间复杂度为Θ(m)的函数。考虑用C语言编写的以下程序片段:

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

我只能处理所有位都为1的最佳情况,因此时间复杂度将为Θ(n),但我在确定最坏情况时会产生混淆,这种情况将在所有位为0或0时发生超过一半的比特是0,问题是函数的复杂性使我感到困惑,如果我试图忽略它那么复杂性将是Θ(n)本身,请指导我解决这个问题。

1 个答案:

答案 0 :(得分:2)

传递给f的所有计数器的总和最多为n,因此调用f的总成本为O(n)。这是因为f(m)具有时间复杂度Theta(m),这意味着成本f(m)<1。对于某些c,c * m,因此可以通过c *(m_1 + m_2 + ... + m_k)将输入m_1,m_2,...,m_k调用f的成本限制为。

每次循环都会完成一些工作,因此总成本也会低于n的倍数。因此总成本是Theta(n)。