Algorithm 比较指数函数的增长率?
假设我们有两个函数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 =22n 所以我们假设f(n)比g(n)增长快得多 方法二:使用对数 如前所述,设t(n)=f(n)/g(n)。现在,让我们以两边的圆木为底: lg t(n)=lg(f(n)/g(n)) =lg(22n+1/22n) =lg 22n+1-lg 22n) =2n+1-2n 现在,让我们以两边的圆木为基础: lgt(n)=(n+1)lg2/n lg2 =(n+1)/n 忽略常数项,我们得到lgt(n)=1,这是一个常数,因此f(n)和g(n)应该具有相同的增长率 为什么我用方法二得到了错误的答案?你错在哪里:“忽略常数项” t(n)=(n+1)/n=n/n+1/n=1+1/n>1你错在哪里:“忽略常数项”Algorithm 比较指数函数的增长率?,algorithm,function,big-o,time-complexity,asymptotic-complexity,Algorithm,Function,Big O,Time Complexity,Asymptotic Complexity,假设我们有两个函数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 =22n 所以我们假设f(n)比g(n)增长快得多 方法二:使用对数 如前所述,设t(n)=f(n)/g(n)。现在,让我们以两边的圆木为底: lg t(n)=lg(f(n)/g(n)) =lg(22n+1/22n) =lg 22n+1-lg 22n) =2n+1
t(n)=(n+1)/n=n/n+1/n=1+1/n>1我认为您的错误假设如下: 如果logf(x)/logg(x)是常数,那么f(x)=Θ(g(x)) 这里有一个简单的反例。设f(x)=x2和g(x)=x。然后 日志f(x)=日志x2=log(2日志x)=日志2+log x 及 对数g(x)=对数x 在这里,logf(x)和logg(x)只相差一个常数(即log2),但显然f(x)和g(x)的增长率不同。换句话说,在获取两个函数的增长率日志后忽略常数是不安全的 你的逻辑还有第二个错误。如果你计算f(n)/g(n,你得到 22n+1/22n =22n+1-2n =22n 如果你记录两次,你就会 lg 22n =lg 2n =n 所以比率的对数不是(n+1)/n;相反,它是n,它仍然趋向于无穷大。这也会告诉你f(n)的增长速度比g(n)快得多
希望这有帮助 我认为您的错误假设如下: 如果logf(x)/logg(x)是常数,那么f(x)=Θ(g(x)) 这里有一个简单的反例。设f(x)=x2和g(x)=x。然后 日志f(x)=日志x2=log(2日志x)=日志2+log x 及 对数g(x)=对数x 在这里,logf(x)和logg(x)只相差一个常数(即log2),但显然f(x)和g(x)的增长率不同。换句话说,在获取两个函数的增长率日志后忽略常数是不安全的 你的逻辑还有第二个错误。如果你计算f(n)/g(n,你得到 22n+1/22n =22n+1-2n =22n 如果你记录两次,你就会 lg 22n =lg 2n =n 所以比率的对数不是(n+1)/n;相反,它是n,它仍然趋向于无穷大。这也会告诉你f(n)的增长速度比g(n)快得多
希望这有帮助 这个问题似乎离题了,因为它是关于数学的。你假设
a/b=(log a)/(log b)
,这通常是错误的。这个问题似乎离题了,因为它是关于数学的。这个问题似乎离题了,因为它是关于数学的。你假设a/b=(log a)/(log b)
这通常是错误的。这个问题似乎离题了,因为它是关于数学的。1+1/n在上面是以常数2为界的。@Scott Hunter是的,你是对的。我犯了一个错误,1+1/n在常数2上有界。@Scott Hunter是的,你是对的。我是在哪里弄错的