我更喜欢尽可能少的正式定义和简单的数学。
当前回答
如果你有一个合适的概念的无限在你的头脑,那么有一个非常简短的描述:
大 O 评级告诉你解决一个无限大的问题的成本。
此外,
常见因素不可忽视
如果你升级到一个可以运行你的算法的计算机两倍的速度,大 O 评级不会注意到这一点. 持续的因素改进太小,甚至在大 O 评级工作的规模中也会注意到。
然而,任何“大”比恒定的因素都可以被检测到。
如果上面的没有意义,那么你头脑中没有相容的直观的无限观念,你可能应该忽略上面的所有观念;我唯一知道如何使这些观念严格,或者解释它们是否已经是直观的有用,就是先教你大O评分或类似的东西。
其他回答
最简单的定义我可以给大 Oh 评分是:
智者可能已经意识到,我们可以表达操作的数量如:n2 + 2n. 但是,正如你从我们的例子中看到的两个数字的百万数字左右,第二个术语(2n)变得毫无意义(计算为0.0002%的总操作在这个阶段)。
因此,要找到一个名字给了电话号码(逆转搜索):
最佳案例:O(1);预期案例:O(n)(为500,000);最糟糕案例:O(n)(为1000,000)。
旅行卖家
听起来很简单吗?再想一想。
聚合物时间
另一个我想快速提到的是,任何具有O(na)复杂性的算法都说具有多元复杂性,或者在多元时间可溶解。
测量软件程序的速度非常困难,当我们尝试时,答案可以非常复杂,并且充满了例外和特殊案例,这是一个很大的问题,因为所有这些例外和特殊案例都令人沮丧和无助,当我们想比较两个不同的程序,以确定哪个是“最快”。
好事:
邪恶的:
和那可怕的:
上述说法是一个很好的开始,但不是完全真实的。
更准确的解释(数学)
n = 输入参数数
T(n) = 表达算法运行时间的实际函数为 n 的函数
c = 常态
f(n)= 表达算法运行时间为 n 的函数的约定函数
接下来,在大O方面,接近f(n)被认为足够好,只要下面的条件是真实的。
lim T(n) ≤ c×f(n)
n→∞
方程式是如 n 接近无限, T 的 n 是少于或等于 c 次 f 的 n。
T(n)∈O(n)
回到英语
基于上面的数学定义,如果你说你的算法是一个大O的n,这意味着它是一个函数的n(输入参数的数量)或更快。
Big O of n 意味着我的算法运行至少如此之快. 你不能看你的算法的 Big O 评分,并说它很慢. 你只能说它很快。
大 O 是算法使用时间/空间的尺寸,与其输入的尺寸相比。
如果一个算法是O(n),那么时间/空间将与其输入相同的速度增加。
如果一个算法是O(n2)则时间/空间增加以其输入的速度为方形。
等等等。
我找到了一个非常好的解释关于大O评分,特别是对于一个没有太多的数学的人。
https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/
在计算机科学中使用Big O评分来描述算法的性能或复杂性。Big O具体描述了最糟糕的情况,并且可以用来描述一个算法所需的执行时间或使用的空间(例如在内存或磁盘上)。