算法中使用的O()表示法

时间:2014-12-18 12:46:04

标签: algorithm

为什么我们不能写 为2n =为O(n ^ 2) 虽然可以写 2n = o(n ^ 2) 你能否让我对O()和o()之间的区别有所了解 我试着用sahani的计算机算法来理解。 但我怀疑还不清楚

3 个答案:

答案 0 :(得分:6)

小o表示上界渐近复杂度,无法达到最大渐近复杂度"

例如,7n^2位于O(n^2)但不在o(n^2)中。如果我们使用set术语,复杂性标记(O,o,Omega,omega,Theta)都是sets函数:

o(f(n)) = O(f(n)) \ Theta(f(n))

其中,Theta是通常的大Theta符号,并通过以下方式用术语表示:

Theta(f(n)) = O(f(n)) [intersection] Omega(f(n))

在单词中,o(f(n))包含O(f(n))但不在Theta(f(n))

中的所有函数

作为旁注,请注意,对于您的示例 - f(n) = 2n,它位于O(n^2)o(n^2),但仅限于O(n) - 而不是o(n) {1}}

答案 1 :(得分:1)

你也可以说2n = O(n ^ 2),它没有问题。定义如下:

Big-O Notation : We say f(n) is O(g(n) iff There there exist positive constant c and n0 such that 0 <= f(n) <= c*g(n) for all n >= n0

Small-o Notation : We say f(n) is o(g(n)) iff For any positive constant c, there exists a constant n0 > 0 such that 0 <= f(n) < c*g(n)

(参考定义:算法导论 - 麻省理工学院出版社)

直观地用小写符号表示当n接近无穷大时,f(n)相对于g(n)变得无关紧要。

然而,大约2n和O(n ^ 2)你可以看到,通过选择适当的常数c和n0,根据定义,我们有2n = O(n ^ 2)。只需选择c = 1和n0 = 3。

答案 2 :(得分:0)

用简单的语言说, o表示法为您提供最坏情况下最大时间/空间要求的信息。 就像排序和升序列表到降序列表一样。

虽然O为您提供所需的最短时间/空间信息,如已经排序的列表将需要列表n比较,以便知道列表已经排序!!