假设我们有两个函数f(n)= 2 2 n + 1 和g(n)= 2 2 n 。我想用两种不同的方法比较这两种函数的增长率。 p>
让我们定义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)应该具有相同的增长率。 p>
为什么我使用方法二得到了错误的答案?
答案 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)增长得快得多。
希望这有帮助!