我更喜欢尽可能少的正式定义和简单的数学。
当前回答
什么是“大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
其他回答
算法例(Java):
public boolean search(/* for */Integer K,/* in */List</* of */Integer> L)
{
for(/* each */Integer i:/* in */L)
{
if(i == K)
{
return true;
}
}
return false;
}
算法描述:
这个算法搜索一个列表,项目按项目,寻找一个密钥,在列表中的每个项目,如果它是密钥,然后返回真实,如果循环没有找到密钥,返回虚假。
Big-O 评分代表了复杂性(时间、空间等)的顶端。
要找到 The Big-O on Time Complexity:
计算时间(考虑到输入大小)最糟糕的案例需要: 最糟糕的案例: 关键不在列表中 时间(Worst-Case) = 4n+1 时间: O(4n+1) = O(n) <unk>在大O,恒例被忽视 O(n) ~ 线性
还有大欧米加,它代表了最佳案例的复杂性:
最佳案例:关键是第一个项目 时间(最佳案例) = 4 时间: Ω(4) = O(1) ~ Instant\Constant
“什么是明确的英语解释大O?尽可能少的正式定义和简单的数学。
这样一个美丽简单而短暂的问题似乎至少值得一个同样短暂的答案,就像一个学生在教学期间可以得到的那样。
大 O 评级简单地说明一个算法可以运行多长时间,仅仅是输入数据的数量。
(在一个美妙的,无单位的时间感中!)(这就是重要,因为人们总是想要更多,无论他们生活在今天还是明天)
好吧,什么是那么奇妙的关于大O评级,如果这就是它做什么?
实际上,Big O分析是如此有用和重要,因为Big O把重点放在算法本身的复杂性上,完全忽略了一切只是比例性恒定的东西 - 如JavaScript引擎,CPU的速度,您的互联网连接,以及所有快速变成像模型T一样可笑的过时的东西。
我找到了一个非常好的解释关于大O评分,特别是对于一个没有太多的数学的人。
https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/
在计算机科学中使用Big O评分来描述算法的性能或复杂性。Big O具体描述了最糟糕的情况,并且可以用来描述一个算法所需的执行时间或使用的空间(例如在内存或磁盘上)。
大 O 评分最常被编程者用作计算(算法)将需要多长时间完成的约定测量,表达为输入组的尺寸的函数。
在许多情况下,一个算法的“O”将落入下列情况之一:
O(1) - 完成时间是相同的,无论输入组的尺寸. 一个例子是通过指数访问一个序列元素. O(Log N) - 完成时间增加大约与 log2(n)相匹配。 例如, 1024 个元素需要大约两倍的长度为 32 个元素,因为 Log2(1024) = 10 和 Log2(32) = 5. 一个例子是找到一个元素在二进制搜索树(BST)。
大 O 忽略了没有有意义的因素,因为输入尺寸向无限增加,而函数的增长曲线,这意味着由函数添加或加倍的恒数只是被忽略。
什么是“大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