比较指数函数的增长率?

时间:2013-09-05 17:53:13

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

假设我们有两个函数f(n)= 2 2 n + 1 和g(n)= 2 2 n 。我想用两种不同的方法比较这两种函数的增长率。

方法一:取比率

让我们定义t(n)= f(n)/ g(n)。然后

  

t(n)= f(n)/ g(n)

     

= 2 2 n + 1 / 2 2 n

     

= 2 2 n + 1 - 2 n

     

= 2 2 n

因此我们假设f(n)比g(n)增长得快得多。

方法二:使用对数

如前所述,设t(n)= f(n)/ g(n)。现在,我们来看两个方面的基数:

  

lg t(n)= lg(f(n)/ g(n))

     

= lg(2 2 n + 1 / 2 2 n

     

= lg 2 2 n + 1 - lg 2 2 n

     

= 2 n + 1 - 2 n

现在,让我们从两个方面取两个对数:

  

lg lg t(n)=(n + 1)lg 2 / n lg 2

     

=(n + 1)/ n

忽略常数项,我们得到lg lg t(n)= 1,这是一个常数,所以f(n)和g(n)应该具有相同的增长率。

为什么我使用方法二得到了错误的答案?

2 个答案:

答案 0 :(得分:2)

你出错的地方:“忽略不变的术语”。

t(n)=(n + 1)/ n = n / n + 1 / n = 1 + 1 / n> 1

答案 1 :(得分:2)

我认为您的错误假设如下:

  

如果log log f(x)/ log log g(x)是常数,则f(x)=Θ(g(x))。

这是一个简单的反例。令f(x)= x 2 且g(x)= x。然后

  

log log f(x)= log log x 2 = log(2 log x)= log 2 + log log x

  

log log g(x)= log log x

这里,log log f(x)和log log g(x)只是一个常数(即log 2),但很明显f(x)和g(x)以相同的速率增长是不正确的。换句话说,在记录两个函数的增长率之后忽略常量是不安全的。

你的逻辑中有第二个错误。如果你计算f(n)/ g(n),你得到

  

2 2 n + 1 / 2 2 n

     

= 2 2 n + 1 - 2 n

     

= 2 2 n

如果你记录这两次,你会得到

  

lg lg 2 2 n

     

= lg 2 n

     

= n

因此,比率的对数日志是(n + 1)/ n,这是不正确的。相反,它是n,它仍然趋向无限。这也会告诉你f(n)比g(n)增长得快得多。

希望这有帮助!