我更喜欢尽可能少的正式定义和简单的数学。
当前回答
我最喜欢的英语词来描述这个概念是你为一个任务付出的代价,因为它越来越大。
既然这些常态在长期内并不重要,这种语言允许我们讨论超越我们正在运行的基础设施之外的任务,所以工厂可以到任何地方,工人可以到任何地方 - 它都是可怕的,但是工厂的大小和工人的数量是我们在长期内可以改变的事情,因为您的输入和输出增长。
由于时间和空间是经济量(即它们是有限的)在这里,它们都可以用这个语言表达。
技术笔记: 时间复杂性的一些例子 - O(n) 一般意味着如果一个问题是“n”的大小,我至少必须看到一切。 O(log n) 一般意味着我减半问题的大小,检查并重复,直到任务完成。
其他回答
预告片
算法:解决问题的程序/公式
如何分析算法,如何比较算法?
例如:你和一个朋友被要求创建一个函数,将数字从 0 到 N. 你与 f(x) 和你的朋友与 g(x) 相同的结果,但两个函数有不同的算法。
Big-O 评分:描述运行时间将与输入相对增长的速度,因为输入随意大。
三个关键点:
比较运行时间的增长速度 不要比较准确的运行时间(取决于硬件) 只关心运行时间的增长与输入(n) 因为n 随意大,专注于将增长最快的术语,因为n 得到大(想想无限) AKA 无形分析
空间复杂性:除了时间复杂性之外,我们也关心空间复杂性(一个算法使用的内存/空间多少)。
假设我们正在谈论一个算法A,该算法应该做一些与数据集的尺寸n。
然后 O( <某些表达式 X 涉及 n> ) 意思,在简单的英语:
如果您在执行 A 时不幸,可能需要尽可能多的 X(n) 操作完成。
正如发生的那样,有某些功能(想想它们作为X(n))的实施,这些功能往往很常见,这些功能是众所周知的,易于比较的(例子:1、Log N、N、N^2、N!等)。
比较这些,当谈到A和其他算法时,很容易根据他们可能需要完成的操作数量排序算法。
总的来说,我们的目标将是找到或结构一个算法A,以便它有一个函数X(n)返回尽可能低的数字。
什么是“大O”笔记的明确英语解释?
我想强调“大O”评分的驱动动力是一件事,当算法的输入尺寸变得太大时,算法的某些部分(即恒数、比例、术语)的方程式描述算法的尺寸变得如此无意义,以至于我们忽略它们。
因此,如果输入尺寸不太大,那么“大O”评分(上限)的想法将毫无意义。
Lets say you want to quantify the performance of the following algorithm
int sumArray (int[] nums){
int sum=0; // here we've 1 operation
for(int i=0; i < nums.length;i++){ // we've n times
sum += nums[i]; // taking initialization and assignments, 3 ops
}
return sum;
}
在上面的算法中,让我们说你发现T(n)如下(时间复杂性):
T(n) = 3*n + 2
n= 1,000,000 -> T(1,000,000) = 3,000,002
n=1,000,000,000 -> T(1,000,000,000) = 3,000,000,002
n=10,000,000,000 -> T(10,000,000,000) = 30,000,000,002
将此类输入给另一个函数 F(n) = n
n= 1,000,000 -> F(1,000,000) = 1,000,000
n=1,000,000,000 -> F(1,000,000,000) = 1,000,000,000
n=10,000,000,000 -> F(10,000,000,000) = 10,000,000,000
因为你可以看到输入尺寸变得太大,T(n)大约相当于或接近F(n),所以连续2和比例3变得太不重要,现在大O“评级的想法来了,
O(T(n)) = F(n)
O(T(n)) = n
如果你有一个合适的概念的无限在你的头脑,那么有一个非常简短的描述:
大 O 评级告诉你解决一个无限大的问题的成本。
此外,
常见因素不可忽视
如果你升级到一个可以运行你的算法的计算机两倍的速度,大 O 评级不会注意到这一点. 持续的因素改进太小,甚至在大 O 评级工作的规模中也会注意到。
然而,任何“大”比恒定的因素都可以被检测到。
如果上面的没有意义,那么你头脑中没有相容的直观的无限观念,你可能应该忽略上面的所有观念;我唯一知道如何使这些观念严格,或者解释它们是否已经是直观的有用,就是先教你大O评分或类似的东西。
最简单的定义我可以给大 Oh 评分是:
智者可能已经意识到,我们可以表达操作的数量如:n2 + 2n. 但是,正如你从我们的例子中看到的两个数字的百万数字左右,第二个术语(2n)变得毫无意义(计算为0.0002%的总操作在这个阶段)。
因此,要找到一个名字给了电话号码(逆转搜索):
最佳案例:O(1);预期案例:O(n)(为500,000);最糟糕案例:O(n)(为1000,000)。
旅行卖家
听起来很简单吗?再想一想。
聚合物时间
另一个我想快速提到的是,任何具有O(na)复杂性的算法都说具有多元复杂性,或者在多元时间可溶解。