我正在采用" Intro To Algorithms"关于Coursera的课程,我已经看到了处理Big-Theta,Big-Omega和Big-O符号的视频。视频结束测验提出以下问题:
Q: Which of the following functions is O(N^3)?
a) 11N + 15lgN + 100
b) (N^2)/3
c) 25,000*(N^3)
d) All of the above
我回答说" c"并被告知我的答案是不正确的,并且正确答案实际上是" d"。课程提供的解释没有多大帮助:
Recall that big-Oh notation provides only an upper bound on the growth
rate of a function as N gets large. In this course, we primarily use
tilde notation because it more accurately describes the function—it
provides both an upper and lower bound on the function as well as the
coefficient of the leading term.
我的印象是,应该删除较低阶的术语(即" 15lgN + 100")并且只关注最高阶的术语。此外,我无法看到N ^ 3如何成为像N ^ 2这样的二次(而不是立方)函数的上界。
所以我的问题是,为什么" a"和" b"在这种情况下归类为O(N ^ 3)?
答案 0 :(得分:4)
解释说:“回想一下,大哦符号只能提供增长的上限 N变大的函数率。“
在这个特定的上下文中,上限可以理解为“不会比N³增长得快”。
11N + 15lgN + 100
确实不会比N³
增长得快。
答案 1 :(得分:3)
您知道吗,f(n) = O(g(n))
暗示f(n) <= constant* g(n)
,对吧?
换句话说,这意味着,当您绘制f(n)
和g(n)
的图表时,在某个值之后,g(n)
将始终超过f(n)
。
此处g(n)
为N^3
,其余为f(n)
。现在,N^3
始终是>=
个选项a
,b
,c
。因此回答id D
:)
修改强> 以下陈述属实,
但只有n = O(n)
是紧上界,这是我们应该在算法的时间复杂度推导中使用的。如果我们使用第二和第三选项,那么我们会滥用Big-O表示法,或者让我们说它们是上界但不是紧紧限制的!
编辑2 :见下图
G(x)
是F(x)
的上限,而H(x)
是F(x)
的上限但不紧张!我们仍然会说,F(x)=O(G(x))
&amp; F(x)=O(H(x))
。当考试/面试中的某个人要求时间复杂时,他们要求的是严格的界限,而不是上限。不幸的是,紧密的上限和上限术语可以互换地用于考试/面试。
答案 2 :(得分:3)
认为O(N ^ 2)也是O(n ^ 3),O(n ^ 4)等等。 O(N ^ 2)总是在O(n ^ 3)下绑定,因此O(n ^ 2)确实是O(n ^ 3)。
http://en.wikipedia.org/wiki/Big_O_notation#/media/File:Big-O-notation.png
答案 3 :(得分:3)
许多人已经引用了函数f(n),它具有上限,说O(n)复杂度也是O(n ^ 2),O(n ^ 3),O(n ^ 4)......等
这是否有意义,或者如果感到困惑,请以绝对的外行人的角度思考。
假设一个进程需要10秒的最大上限来执行,无论输入是什么,我们都可以得出结论: -
如果确实如此,即使如下也是如此: -
依旧.......
因此您可以将答案关联起来。希望能给你一瞥。