假设我们有两个函数f(n)=22n+1和g(n)=22n,我想用两种不同的方法比较这两个函数的增长率。
方法一:取比例
让我们定义t(n)=f(n)/g(n)那么
t(n)=f(n)/g(n)
=22N+1/22N
=22N+1-2N
=22牛顿
所以我们假设f(n)比g(n)增长快得多。
方法二:使用对数
如前所述,设t(n)=f(n)/g(n)现在,让我们以两边的圆木底座为例:
lg t(n)=lg(f(n)/g(n)
=长度(22n+1/22n)
=LG 22N+1-LG 22N)
=2n+1-2n
现在,让我们把两边的圆木底座取下来:
lg lg t(n)=(n+1)lg 2/n lg 2
=(n+1)/n
忽略常数项,我们得到lg lg t(n)=1,这是一个常数,所以f(n)和g(n)应该有相同的增长率。
为什么我用第二种方法得到了错误的答案?

最佳答案

我认为你的错误是假设如下:
如果对数f(x)/对数g(x)是常数,则f(x)=Θ(g(x))。
这里有一个简单的反例。设f(x)=x2和g(x)=x。然后
对数f(x)=对数x2=对数(2logx)=对数2+对数x

log log g(x)=loglogx
在这里,log log f(x)和log log g(x)仅仅相差一个常数(即log 2),但显然,f(x)和g(x)的增长率是不一样的。换句话说,在记录两个函数的增长率之后忽略常数是不安全的。
你的逻辑有第二个错误如果你计算f(n)/g(n),你会得到
22N+1/22N
=22N+1-2N
=22牛顿
如果你拿两次日志,你会得到
LG LG 22N型
=长度2n
=n个
所以比率的对数甚至不是(n+1)/n,而是n,它仍然趋向于无穷远。这也会告诉你,f(n)比g(n)增长得快得多。
希望这有帮助!

10-02 06:41