如果f(n)为O(g(n)),则f(n)渐近地增长不快于g(n)吗?

时间:2018-08-16 14:36:17

标签: algorithm big-o complexity-theory

我的测验中有一个问题:

“如果f(n)为O(g(n)),则f(n)渐近增长的速度不快于g(n),是对还是错?”

我的理解是:

  • O(g(n))大于g(n),因为它是一个上限
  • f(n)是O(g(n))
  • f(n)大于g(n)
  • f(n)的增长快于g(n)
  • 所以答案一定是假的

但是答案却是对的,我哪里出错了?

5 个答案:

答案 0 :(得分:1)

这样的推理O(g(n))是所有函数的集合,这些函数的渐近增长速度不超过g(n)。当f(n)处于此集合中时,它的增长因此不会比g(n)快。

答案 1 :(得分:1)

这主要是定义问题。 big-O符号具有精确的定义(尽管有时以不同的方式定义,但我认为您的学习材料明确地从一些广泛使用的定义中选择了一个精确的定义),因此您可以随时对其进行查看。

但是短语“ X渐近地增长不快于Y”并不清楚。您在某处定义了它吗?如果是,它说X = O(Y)吗?如果是这样,这是您的答案。

答案 2 :(得分:1)

渐近上限,我们使用O表示法。

O(g(n))= f(n):0 <= f(n)<= cg(n)对于所有n> = n0。

函数f(n)是O(g(n))的成员。 c和n0是常数。

答案 3 :(得分:0)

您的错误是直接将O(g(n))与g(n)进行比较,因为大的O描述了增长率,而g(n)是一个函数,因此无法直接进行比较。

从定义上说,这个问题基本上是正确的:其增长率的上限等于g(n)的增长率,因此它的增长率不可能超过g(n)。

答案 4 :(得分:0)

让我们首先选择一个特定的定义,因为您并没有真正为我们提供定义。

从Sipser的简介到计算理论

  

f g 是使 f g N → R +

     

假设正整数 c m f(n) = O(g(n)) >存在这样   对于每个整数 n m f(n) cg(n)

根据此定义, f(n) 可以比普通的 g(n)增长更快,因此您的结论没有错!

但是有一个陷阱,它涉及到渐近一词。

对于 f(n)要比 g(n)渐近地增长渐近,它需要能够“超越”其的所有功能形式1 * g(n),2 * g(n),3 * g(n),...,1,000,000 * g(n),...为 n 的某些或其他值。

一个示例可能会有所帮助。

函数 f(n)= 3n +1 的增长速度肯定快于 n ,但是很明显 f(n)≤10n 对于所有 n> 0 ,因此根据 f(n)= O(n)

的定义