我更喜欢尽可能少的正式定义和简单的数学。


当前回答

EDIT:快注,这几乎是令人困惑的Big O评分(这是一个上线)与Theta评分(这是一个上线和下线)。在我的经验中,这实际上是非学术设置讨论的典型。

在一个句子中:随着你的工作的规模上升,完成工作需要多长时间?

“大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

上述说法是一个很好的开始,但不是完全真实的。

更准确的解释(数学)

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 是一种代表任何函数的顶部界限的手段,我们通常使用它来表达一个函数的顶部界限,说明一个算法的运行时间。

Ex : f(n) = 2(n^2) +3n 是代表假设算法的运行时间的函数,Big-O 评级基本上给了这个函数的上限,即 O(n^2)。

这个评级基本上告诉我们,对于任何输入“n”的运行时间不会超过Big-O评级所表达的值。

此外,同意上述所有详细答案,希望这有助于!!!

“什么是明确的英语解释大O?尽可能少的正式定义和简单的数学。

这样一个美丽简单而短暂的问题似乎至少值得一个同样短暂的答案,就像一个学生在教学期间可以得到的那样。

大 O 评级简单地说明一个算法可以运行多长时间,仅仅是输入数据的数量。

(在一个美妙的,无单位的时间感中!)(这就是重要,因为人们总是想要更多,无论他们生活在今天还是明天)

好吧,什么是那么奇妙的关于大O评级,如果这就是它做什么?

实际上,Big O分析是如此有用和重要,因为Big O把重点放在算法本身的复杂性上,完全忽略了一切只是比例性恒定的东西 - 如JavaScript引擎,CPU的速度,您的互联网连接,以及所有快速变成像模型T一样可笑的过时的东西。