计算函数的大theta

时间:2013-01-24 15:42:51

标签: asymptotic-complexity big-theta

我被要求计算家庭作业的大theta,但是这个区域的讲义材料有点稀疏。

给出循环

for (x = 1; x <= n; x *= 2){
  for(y = 1; y <= n; y += 2)
    t++;

我已经制定了执行图表

x       y
1       1, 3, 5, 7 ... n-2, n
2       1, 3, 5, 7 ... n-2, n
4       1, 3, 5, 7 ... n-2, n
8       1, 3, 5, 7 ... n-2, n
log n   (n+1)/2

它的内循环增量器让我失望。它执行(n + 1)/ 2次,因此大theta必须是(n log n + log n)/ 2.

我说错了吗?

1 个答案:

答案 0 :(得分:1)

您的计算显示正确,但您需要继续执行一些步骤。

Big theta忽略了小于最大术语的所有内容以及所有常数因素(the equation可能有助于理解这一点)。

Theta((n log n + log n)/2)
= Theta(1/2 n log n + 1/2 log n)
= Theta(1/2 n log n)
= Theta(n log n)

为什么它忽略常数因子从查看等式(你可以恰当地操纵k)就很明显了。

为什么它会忽略小于最大术语的所有内容:

Assume g(x) <= f(x) (from any x onward, since the Theta equation only needs to hold from any n onward)
f(x) <= f(x) + g(x) <= 2.f(x)
Thus Theta(f(x) + g(x)) = Theta(2.f(x)) = Theta(f(x))