algorithm - 这种确定上限的推理有什么问题?

标签 algorithm math time-complexity logarithm

我在算法课上出了一道题

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,所以它与上面更明显的说法相矛盾。我在这个推理中做错了什么?

最佳答案

从本质上讲,您的推理可以归结为以下陈述:

If log f(n) ≤ c log g(n) for some constant c, then f(n) = O(g(n)).

不过,此声明通常不是真实的声明。看到这一点的一种方法是找到一些反例:

  • 如果 f(n) = n4 且 g(n) = n,则 log f(n) = 4 log n 和 log g(n) = log n。确实存在大于 4 log n 的 log n 的倍数,但 n4 ≠ O(n)。

  • 如果 f(n) = 4n 且 g(n) = 2n,则记录 f(n) = 2n 并记录 g(n ) = ñ。有一个 n 的倍数使它大于 2n,但是 4n ≠ O(2n)。

要真正了解为什么这不起作用,请注意 c log g(n) = log g(n)c,因此将 log 乘以常数等同于提高原始值对一些大功率起作用。您可以通过将一个函数乘以一个常数来推断它的大 O,但您不能通过将它提升到某个幂来推断它,这就是为什么这种推理会失败。

关于algorithm - 这种确定上限的推理有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822501/

相关文章:

php - 确切知道转换后的视频的大小

algorithm - 删除链表中的第10000个节点

algorithm - 2009 年 ACM-ICPC 世界总决赛的飞机调度挑战

algorithm - 如何使用堆来优化 Prim 的最小生成树算法?

c++ - 如何用 C++ 编写高效的遗传算法

c++ - 处理嵌套 std::any_of 的模板函数

math - 如何从任意多边形中减去圆

python - 找出所有满足 i+j+k=n 的三元组 i,j,k

algorithm - 递归的复杂度 : T(n) = T(n-1) + T(n-2) + C

time-complexity - 如何计算在排序数组中出现两次的键的二分搜索的最坏情况时间?