【问题标题】:Big O Notation Of Exponential Functions指数函数的大 O 表示法
【发布时间】:2013-09-29 18:26:16
【问题描述】:

我注意到 1000n 或 10n 的 big-O 与 O(n) 相同,但 2^n 和 3^n 的 big-O 不同:O(2^n) 和 O(3^ n),我不明白为什么我们不能忽略这种情况下的常数(2 或 3)以及是否有任何数学证据证明这一点?

【问题讨论】:

  • 您不会忽略 big-O 表示法中的常量。你忽略系数。 2 和 3 是基数,不是系数。
  • 你能说出Big-Oh的定义吗?请记住,Big-Oh 有一个数学定义,不应该完全直观地使用。在我看来,记住“有时你可以忽略常量”是一个坏习惯。

标签: algorithm


【解决方案1】:

因为对于任意大的n,没有满足不等式3^n <= k * 2^nk 的常数值。因此f(n) = 3^n 不是O(2^n) 的成员。

http://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann.E2.80.93Landau_notations

【讨论】:

  • 确切地说,您正在展示O(3^n) = O(2^n) 声明的反例。特别是,f(n) = 3^nO(3^n) 中,但不在O(2^n) 中,使用您上面给出的参数。因此,通过外延公理,集合不相等
  • @roliu:我不知道那个公理是什么,但是是的,这是隐含的论点;)
  • 这是最流行的集合论中的一个公理,ZFC:en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_theory。它只是说“如果两个集合包含相同的元素,则它们是相等的”。没有人在真实的证明中引用它,但我只是试图说服 SO 开始使用实际的数学推理而不是直觉(通过使用数学术语非常冗长)。如果您只是想在编写代码时决定使用哪个实现,您可以使用直觉。当有人说“证明这一点”时,我认为你应该,你知道,使用数学 :)
  • @roliu:嗯,我想这里的大多数人都会满足于“如果两个集合没有相同的成员,则它们是不相等的”,而无需求助于证明/行话!集合论公理可能有点超出 SO 的范围(与 CS/Math StackExchange 不同)。但是感谢您的链接,我总是有兴趣学习一些有趣的数学......
  • (并且......七个月后,我通过不同的途径提出了同样的问题,专门寻找@rliu 提供的信息。猜猜它只是显示出来。)
【解决方案2】:

尽管对于最初的提问者来说,这可能不再有用,
我认为可以以更简单的方式处理它。

O 表示法的基本定义:当且仅当 f(g) 在 O(g(n)) 中时,
那么存在一个有理数 c,它认为 f(g) = c * g(n),因为 n >= n0
(n0 是你自己选择的数字)

让我们尝试将其应用于 O(2^n) 中的 3^n
3^n = 2^n * c
3^n = 2^ n * (3^n / 2^n)
3^n = 2^n * (3/2)^n
3^n = 2^n * 1.5^n

这意味着 c = 1.5^n 这不是一个有理数,而是一个指数函数。

另一方面,在 O(2^n) 中对 3^n 进行相同操作,我们将得到 2^n

这似乎是一个冲突,直到你意识到 0.75^n 0,这意味着如果你取任何 c > 1,它将大于 n = 0 的 0.67^n

【讨论】:

    【解决方案3】:

    为了实现两个复杂性,f(n) 和 g(n),您应用了限制: lim_{n->\inf} f(n)/g(n) 你有三个可能的答案:

    1) lim_{n->\inf} f(n)/g(n) = 0; 这意味着 f(n) ∈ O(g(n)) 和 g(n) ∉ O(f(n))

    2) lim_{n->\inf} f(n)/g(n) = +/- inf; 这意味着 f(n) ∉ O(g(n)) 和 g(n) ∈ O(f(n))

    3) lim_{n->\inf} f(n)/g(n) ∈ 实数; 这意味着 f(n) ∈ O(g(n)) 和 g(n) ∈ O(f(n))

    然后到 demostrade 2^n ∈ O(3^n) 你这样操作

    lim_{n->\inf} 2^n/3^n = lim_{n->\inf} (2/3)^n = 0

    并且被演示了,我们也演示了 3^n ∉ O(2^n),很容易看出 2/3 inf} a^n = 0 if 0 inf} a^n = inf if a > 1;

    为了更好地理解检查:Introduction to Algorithms, Third Edition 作者:Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 和 Clifford Stein

    我是算法教授,希望对你有所帮助。保重。

    【讨论】: