【发布时间】:2010-12-02 17:05:38
【问题描述】:
Big oh 表示法表示所有 g(n) 都是元素 c.f(n),对于某个常数 c,O(g(n))。
我一直想知道并且从来没有真正理解为什么我们需要这个任意常数与边界函数 f(n) 相乘来得到我们的边界?
另外,如何确定这个常数应该是什么数字?
【问题讨论】:
标签: math computer-science big-o
Big oh 表示法表示所有 g(n) 都是元素 c.f(n),对于某个常数 c,O(g(n))。
我一直想知道并且从来没有真正理解为什么我们需要这个任意常数与边界函数 f(n) 相乘来得到我们的边界?
另外,如何确定这个常数应该是什么数字?
【问题讨论】:
标签: math computer-science big-o
常数本身并不能表征 f(n) 与 g(n) 相比的限制行为。
它用于数学定义,它强制存在一个常数 M 使得
如果存在这样的常数,那么您可以声明 f(x) 是 O(g(x)),这是分析算法时常用的表示法,您只是不关心哪个是常数,而只是操作本身的复杂性。该常数能够通过确保 M|g(x)| 是 f(x) 的上限来使该不等式正确。
如何找到取决于 f(x) 和 g(x) 的常数,这是必须证明的数学点,以确保 f(x) 具有 g(x) big-o,因此没有一般规则.看this的例子。
【讨论】:
考虑函数
f(n) = 4 * n
调用此函数O(n) 是否有意义,因为它的增长“与g(n) = n 一样快”。
但是如果O 的定义没有常量,您将无法找到n0,例如所有n > n0, f(n) <= n。这就是为什么你需要恒定的,实际上是从条件,
4 * n <= c * n for all n > n0
你可以得到n0 == 0, c == 4。
【讨论】: