Big-O 表示法O(n)和 Little-O 表示法有什么区别o(n)?
O(n)
o(n)
f - O(g) 本质上说
对于常数 k > 0 的至少一个 选择,您可以找到一个常数 a ,使得不等式 0 <= f(x) <= kg(x) 对于所有 x > a 都成立。
请注意,O(g) 是该条件成立的所有函数的集合。
f - o(g) 本质上说
对于常数 k > 0 的 每一个 选择,您都可以找到一个常数 a ,使得不等式 0 <= f(x) < kg(x) 对于所有 x > a 都成立。
再次注意,o(g) 是一个集合。
在 Big-O 中,您只需要找到一个特定的乘数 k ,对于该乘数 k ,不等式超过某个最小值 x 。
在 Little-o 中,必须有一个最小值 x ,只要它不是负数或零,则无论您使 k 多么小,不等式都在该最小值之后成立。
这些都描述了上限,虽然有点违反直觉,但 Little-o 是更强的陈述。如果 f - o(g) 与 f - O(g) 相比, f 和 g 的增长率之间的差距要大得多。
差异的一个例子是:f - O(f) 为真,但 f - o(f) 为假。因此,Big-O 可以理解为“f - O(g) 意味着 f 的渐近增长不快于 g’s”,而“f - o(g) 意味着 f 的渐近增长严格慢于 g’s”。这就像<=对<。
<=
<
更具体地说,如果 g(x) 的值是 f(x) 值的恒定倍数,则 f - O(g) 为真。这就是为什么在使用 big-O 表示法时可以删除常量的原因。
但是,要使 f - o(g) 为真,则 g 必须在其公式中包含 x 的更高 次方 ,因此 f(x) 和 g(x) 之间的相对间隔实际上必须随着 x 变大而变大.
要使用纯数学示例(而不是指算法):
以下对于 Big-O 是正确的,但如果您使用 little-o,则不正确:
以下情况适用于 little-o:
请注意,如果 f ∈ o(g),这意味着 f ∈ O(g)。例如 x² ∈ o(x³) 所以 x² ∈ O(x³) 也是正确的,(再次认为 O as<=和 o as <)