我更喜欢尽可能少的正式定义和简单的数学。
当前回答
这里来了大O,告诉我们这个数学是多么艰难。
现在他们要求我添加一个到十个!为什么我会这样做?我不想添加一个到六个?添加一个到十个......好......这会更难!
对于大 n 而言, n 平方比 n 更大。
一个:我选择一张卡在我们现在工作的地板部分,你可以为我选择一个,如果你愿意(第一次我们这样做,“我们现在工作的地板部分”是整个地板,当然。
大 O 告诉我们:这个类型需要 O(n log n) 工作完成,在中间情况下。
现在你知道我的朋友,大O,他帮助我们做不到工作,如果你知道大O,你也可以做不到工作!
你和我一起学到了这一切!你太聪明了!谢谢你!
现在这个工作已经完成了,让我们玩吧!
其他回答
大 O 评分是描述一个算法的空间或运行时间的上限的一种方式. n 是问题的元素数量(即序列的尺寸,树上的节点数量等) 我们有兴趣描述运行时间,因为 n 变得大。
要说二进制搜索有运行时间的O(登录)是说有某些恒定的c,你可以增加登录(n)通过它将总是比运行时间的二进制搜索。
换句话说,g(n)是你的算法的运行时间,我们说g(n) = O(f(n))当g(n) <=c*f(n)当n > k,当c和k是某些恒定的。
大 O 在平式英语是如<=(少于或等)。当我们说为两个函数f 和 g,f = O(g) 它意味着f <= g。
但是,这并不意味着任何 n f(n) <= g(n) 事实上,它意味着 f 是增长方面低于或等于 g 的,这意味着在一个点 f(n) <= c*g(n) 之后,如果 c 是恒定的,然后一个点意味着所有 n >= n0 在那里 n0 是另一个恒定的。
仅仅是以快速而简单的方式表达一个算法的复杂性。 大 O 评分存在,以解释任何算法的最佳、最糟糕和平均案例时间复杂性。
否则,与这些功能工作是非常困难的,因为它们倾向于:
有太多的泡沫 - 像二进制搜索这样的算法通常运行得更快,因为序列分区工作得很好,因为 n = 2k − 1 的尺寸,因为序列分区工作得更快。 这个细节并不特别重要,但它警告我们,任何算法的准确时间复杂性功能可能非常复杂,如图2.2 所示,有很少的上下泡沫。
https://mimoza.marmara.edu.tr/~msakalli/cse706_12/SkienaTheAlgorithmDesignMan ual.pdf
定义 : 大 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
当我们有一个函数,如f(n) = n+3 和我们想知道图表看起来如何喜欢,当n接近无限时,我们只是放下所有的连续和较低的顺序术语,因为它们不在乎什么时候n变得大。
常规和较低的命令时间的简单落下,正是找到下方和上方的功能的过程。
根据定义,一个函数是另一个函数的下层或上层界限,如果您可以找到一个恒定的函数,以便为每个 n 的输出比原始函数更大(或较小)。
f(n) = n*C > f(n) = n+3
而且是的 C = 2 会这样做,因此我们的函数 f(n) = n 可以是我们函数 f(x) = x + 3 的顶部界限。
相同的下限:
f(n) = n*C < f(n) = n+3
C = 2 會這樣做