Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 下面的函数O(N^3)是如何实现的?_Algorithm_Big O - Fatal编程技术网

Algorithm 下面的函数O(N^3)是如何实现的?

Algorithm 下面的函数O(N^3)是如何实现的?,algorithm,big-o,Algorithm,Big O,我正在上Coursera的“算法入门”课程,我已经看到了关于大θ、大ω和大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

我正在上Coursera的“算法入门”课程,我已经看到了关于大θ、大ω和大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)?

你知道吗,
f(N)=O(g(N))
意味着
f(N)=
选项
a
b
c
。因此答案id
D
:)

编辑: 以下陈述是正确的

  • n=O(n)
  • n=O(n^2)
  • n=O(n^3)
但是只有
n=O(n)
是紧上界,这就是我们在算法的时间复杂度推导中应该使用的。如果我们使用第二和第三个选项,那么我们就误用了Big-O符号,或者说它们是上界,但不是紧界

编辑2:参见下图

G(x)
F(x)
的紧上界,
H(x)
F(x)
的上界,但不紧!我们仍然会说,
F(x)=O(G(x))
&
F(x)=O(H(x))
。当参加考试/面试的人要求时间复杂度时,他们要求的是严格的界限,而不是上限。不幸的是,严格的上界和上界术语在考试/面试中交替使用。

想想O(N^2)也就是O(N^3),O(N^4)等等。O(N^2)总是受O(N^3)的约束,因此O(N^2)实际上是O(N^3)


许多人已经引用了一个具有上限的函数f(n),比如O(n)复杂度也是O(n^2),O(n^3),O(n^4)。。。等

这有意义吗?或者如果它被弄糊涂了,请用绝对的外行术语来思考

假设一个进程执行的最大上限为10秒,无论输入是什么,我们都可以得出以下结论:-

  • 无论输入是什么,执行都将在10秒内完成
如果这是真的,那么以下情况也是真的:-

  • 无论输入是什么,执行都将在不到或等于100秒的时间内完成
  • 无论输入是什么,执行都将在小于或等于1000秒的时间内完成
等等

这样你就可以把答案联系起来。希望能让你一瞥

解释是这样的:“回想一下,大Oh符号只提供了增长的上限 N变大时函数的速率。”

在这种特殊情况下,上限可以理解为“增长速度不超过N³”


的确,
11N+15lgN+100
的增长速度并不快于

我对大O表示法的理解是,它指定了使用给定算法执行多少操作的“最坏情况”。换句话说,对于给定的问题大小N,算法将永远不需要执行比将上述N插入big-O表达式的结果更多的操作。那么,如果N=1000,为什么计算(1000^2)/3难度的问题需要1000^3次运算呢?是的。如果你把问题改为O(N^4),答案仍然是:)。这里的问题是,我们没有严格限制函数!Tighly边界表示最小上界。为了更好地理解,编辑了答案:)@toomanyrichies这不是最坏的情况,而是一个悲观的近似值。我们通常可以找到并详细计算最坏的情况,但有时我们只能对其进行近似(例如Shell sort),在这种情况下,我们使用一个上限,这个上限可能永远不会达到,但定义了某种保证。然后不是“在最坏的情况下你需要N^3个步骤”,而是“即使在最坏的情况下,你也永远不需要超过N^3个步骤”。@toomanyrichies是的。Coursera不支持人类的符号。根据定义/理论。这清楚地表明,库塞拉是对的,你正确地理解了大O。是我们用错了符号我不会说n=O(n^2)是“误用符号”。最好记住形式定义,当你参加课程、为CS杂志撰写论文或与数学家交谈时,应该使用形式定义,并将其与大多数程序员使用的常见错误用法分开,即O(f)的意思类似于c1*f+c2,或者可能是θ(f) .当你听到有人说O(n^2),您可以尝试根据上下文、说话人和说话人的目标受众来确定哪个定义是什么意思。使用big-O的定义,而不是启发式和印象。@Anonymous:这是什么意思?您能更具体一点吗?我猜@Anonymous说的是同一件事。使用书本定义,但不要使用印象/想法我们有大O符号,所以你是说N^3可能不是方程“a”和“b”的最准确的上界,但它是一个可能的上界(尽管3个方程中的2个永远无法达到)。对吗?