【问题标题】:Big O Notation - what does the natural number M and constant factor C mean?Big O Notation - 自然数 M 和常数因子 C 是什么意思?
【发布时间】:2019-02-22 16:58:23
【问题描述】:
在根据代码摘录识别复杂性或最坏情况时,我了解什么是大 O 表示法。
在课堂上,我被告知,当涉及到复杂性和大 O 表示法时,我们会忽略低于 M 的小参数 n 和常数因子 C。
这是在课堂上给我的:
在 Big-Oh 符号中。令 f 为从 N 到正实数的函数。
(将 f(n) 视为大小为 n 的参数的运行时间。它可以
是最坏的情况,或者可能是平均情况。)让 g 是另一个这样的
功能。我们说 f ∈ O(g) 当有某个自然数 M 并且
常数因子 C,使得对于所有 n > M,我们有 f(n) M. f(n)
我想知道这句话是什么意思,具体来说:
- 我们为什么说:
令 f 为从 N 到正实数的函数。
- 为什么是这样的:
设 g 是另一个这样的函数。
- 这是什么意思:
我们说 f ∈ O(g) 当有一个自然数 M 并且
常数因子 C,使得对于所有 n > M,我们有 f(n) M. f(n)
- 以上摘录与忽略小参数和常数因子 C 有何关系?
【问题讨论】:
标签:
algorithm
math
time-complexity
big-o
complexity-theory
【解决方案1】:
总结一下:C乘以g最终占主导地位 f.
1 和 2。
令 f 是从 N 到正实数的函数。 (将 f(n) 视为大小为 n 的参数的运行时间。它可能是最坏的情况,也可能是平均情况。)设 g 是另一个这样的函数。
好的:f 和 g 是从自然数 (N) 到正实数的函数。为什么是自然数?我们假设参数的大小是我们可以精确指定的。自然数是我们可以精确指定的。实数不是。为什么是正数?我们假设运行时间不一定是我们可以精确指定的。
但这里重要的实际上不是说了什么,而是没有说了什么。没有人说 f 是单调递增的,或者 g 是多项式,等等。我们只知道 f 和 g 是函数。这几乎就是它的全部内容。是的,它们从自然映射到正实数,但就限制而言,这是一个很小的限制。所以这里的重点是:有很多很多的函数 f 和 g 可供选择。唯一比较重要的限制是实数比自然数多得多。
3.
当存在某个自然数 M 和常数因子 C 时,我们说 f ∈ O(g),这样对于所有 n > M,我们有 f(n) M. f(n)
M 和 C 是常数。我们选择 M 和 C,我们就完成了。这里的重点是至少有一个 M 和至少一个C 满足这个句子。不是:any M 也不是 any C。声明是至少有一个这样的 M 和 C。
另一方面,
n 不是常数。我们可以选择 n 为任何数字,只要它大于 M。该语句说,对于 any 选择 n(大于 M),至少可以找到 C 的一个值,所以如果你将 g(n) 乘以 C,这个乘积将大于 f(n)。 什么 n 无关紧要,只要它比 M 大。
当我们假设其中一个限制被取消时,我们考虑常量 M 和 C 的原因就变得很清楚了。假设声明中没有提到 M:
当存在某个常数因子 C 时,我们说 f ∈ O'(g),这样对于所有 n,我们有 f(n)
现在这样说:考虑 f 的所有可能输出和 g 的所有可能输出的空间。如果我们将 g 的输出空间“扩张”一个常数 C,那么它们中的每一个都将大于 f 中的任何一个点。现在这是一个比我们指定 M 时更强的陈述。如果 f(0) = 10 且 g(0) = 0 会怎样?现在,no C 可以生成Cg(0) > Cf(0)。所以,M“切断”了这些坏边。
这个页面有很好的解释和视觉效果:https://xlinux.nist.gov/dads/HTML/bigOnotation.html
【解决方案2】:
对于 (1) 和 (2):通常,在证明或定义中,文本 Let x be a Y 是证明满足条件 Y 的 all x 的一部分附加属性 Z。
一个证明将证明结论 Z 对 X 是正确的。然后,因为除了 Y 之外没有在 X 上指定任何条件,因此可以得出结论,对于所有具有条件 Y 的 X,条件 Z 也是正确的.
您必须自己完成 (3)。除了将陈述分解成更小的部分,理解每个部分,然后将它们组合在一起形成对整个陈述的理解之外,没有其他替代方法。
对于(4):常数C出现在语句本身中,特别重要的是C出现时带有存在限定符:
∃C. ∀n > M. f(n) <= C × g(n)
这在语句中赋予了 C 的含义。为了表达意思,我们最好看整个语句:
∃M. ∃C. ∀n > M. f(n) <= C × g(n)
在这个陈述的中心,我们想要表达 g 比 f“大”的想法。除了,我们关心 f 和 g 的最终行为,而不是它们对小值的行为。因此,在语句中添加了∃M。这就是说最终 g 大于 f。而且,我们对 f 和 g 的“形状”更感兴趣,这给了我们常数 C。
一个有益的练习是用双重否定重写语句:
~ ~ ∃M. ∃C. ∀n > M. f(n) <= C × g(n)
然后通过语句推动第二个否定:
~ ∀M. ∀C. ∃n > M. f(n) > C × g(n)
然后考虑第一个否定中的陈述是什么意思。