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


当前回答

测量软件程序的速度非常困难,当我们尝试时,答案可以非常复杂,并且充满了例外和特殊案例,这是一个很大的问题,因为所有这些例外和特殊案例都令人沮丧和无助,当我们想比较两个不同的程序,以确定哪个是“最快”。

好事:

邪恶的:

和那可怕的:

其他回答

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

一个简单的英语解释需要Big-O评分:

当我们编程时,我们试图解决一个问题. 我们编码的称为算法. 大 O 评级允许我们以标准的方式比较我们算法的最糟糕的案例性能. 硬件特征随着时间的推移而变化,硬件的改进可以减少运行算法需要的时间。

英文片名 What Big O Notation 是:

不是所有的算法运行相同的时间,并且可以根据输入中的项目数量而变化,我们将称之为n. 基于这一点,我们将考虑最糟糕的案例分析,或者运行时间的上限,因为n 变得更大和更大。

1(一) :

这种复杂性与O(1)相同,除非它只是稍微糟糕一点,对于所有实用目的,你可以把它视为一个非常大的连续规模。

和(n):

O(n log n):

O(n2):

它作为一个平方,在那里 n 是平方侧的长度. 这是与“网络效应”相同的增长率,在那里网络中的每个人都可以知道网络中的每个人. 增长是昂贵的. 大多数可扩展的解决方案不能使用这个复杂度的算法,而不做显著的体操。

二(二) :

定义 : 大 O 评级是指如果数据输入增加,算法性能将如何表现的评级。

当我们谈论算法时,有3个重要柱子 算法输入、输出和处理 大 O 是象征性的评分,如果数据输入增加到什么速度,算法处理的性能将有所不同。

例如,请参见下面的函数“函数1”,该函数收集并在第一个记录中进行处理,现在该函数的性能将是相同的,无论您放置1000、10万或100000记录。

void Function1(List<string> data)
{
string str = data[0];
}

void Function2(List<string> data)
        {
            foreach(string str in data)
            {
                if (str == "shiv")
                {
                    return;
                }
            }
        }

因此,通过查看Big O评级,我们分类算法的好和坏区域。

此分類上一篇

https://www.youtube.com/watch?v=k6kxtzICG_g

大O只是一种方式来“表达”自己,以一种常见的方式,“运行我的代码需要多少时间/空间?”

因此,你可能明白“n2”是什么意思,但要更具体,玩你的想法,你有一个简单的,最简单的分类算法;泡沫分类。

我的名单

比较 1 和 6 是最大的? Ok 6 是正确的位置,前进! 比较 6 和 3, oh, 3 是更少的! 让我们移动, Ok 列表改变了,我们需要从现在开始!

為每個項目,你再看所有項目一次,為比較,這也是“n”,所以為每個項目,你看“n”時刻意味著n*n = n2

我希望这就像你想要的那样简单。

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

更准确的解释(数学)

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 评分,并说它很慢. 你只能说它很快。