[英]What is wrong with this reasoning to determine the upper bound?
我在算法类中得到了一个问题
is 2^{2n} upper bounded by O(3^n)?
现在明确2 ^ 2n是4 ^ n,并且4 ^ n不能被3 ^ n上限。
但是,如果我在两侧登录
On LHS I get 2n
On RHS I get kn (where k is some constant)
2n可以在kn的上限,因此它与上面更明显的主张相矛盾。 我在这个推理中做错了什么?
从本质上讲,你的推理归结为这句话:
如果对于某个常数c,log f(n)≤clogg(n),则f(n)= O(g(n))。
不过,这句话通常不是一个真实的陈述。 一种看待这种情况的方法是找到一些反例:
如果f(n)= n 4且g(n)= n,则log f(n)= 4 log n且log g(n)= log n。 确实,log n的倍数大于4 log n,但n 4 ≠O(n)。
如果f(n)= 4 n且g(n)= 2 n ,则log f(n)= 2n且log g(n)= n。 n的倍数使其大于2n,但是4 n ≠O(2 n )。
要真正理解为什么这不起作用,请注意c log g(n)= log g(n) c ,因此将log乘以常量相当于将原始函数提升到某个大功率。 你可以通过将函数乘以常数来推理函数的大O,但是你不能通过将函数提高到一定的幂来推理它,这就是为什么这个推理破坏了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.