为什么我们不能写 为2n =为O(n ^ 2) 虽然可以写 2n = o(n ^ 2) 你能否让我对O()和o()之间的区别有所了解 我试着用sahani的计算机算法来理解。 但我怀疑还不清楚
答案 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比较,以便知道列表已经排序!!