我更喜欢尽可能少的正式定义和简单的数学。
当前回答
大 O 描述了一个功能的增长行为上限,例如一个程序的运行时间,当输入变得大。
例子:
O(n):如果我翻倍输入大小,运行时间将翻倍O(n2):如果输入大小将翻倍运行时间四倍O(log n):如果输入大小翻倍运行时间将增加一倍O(2n):如果输入大小增加一倍,运行时间将翻倍
输入尺寸通常是比特所需的空间来代表输入。
其他回答
大O只是一种方式来“表达”自己,以一种常见的方式,“运行我的代码需要多少时间/空间?”
因此,你可能明白“n2”是什么意思,但要更具体,玩你的想法,你有一个简单的,最简单的分类算法;泡沫分类。
我的名单
比较 1 和 6 是最大的? Ok 6 是正确的位置,前进! 比较 6 和 3, oh, 3 是更少的! 让我们移动, Ok 列表改变了,我们需要从现在开始!
為每個項目,你再看所有項目一次,為比較,這也是“n”,所以為每個項目,你看“n”時刻意味著n*n = n2
我希望这就像你想要的那样简单。
它切断到骨头,只提供关于算法的规模性质的信息,具体如何使用资源(思考时间或记忆)的算法规模,以回应“输入大小”。
考虑蒸汽发动机和火箭之间的差异. 它们不仅仅是相同的东西的不同品种(如说,一个Prius发动机与一个Lamborghini发动机),但它们是显著不同的类型的驱动系统,在它们的核心。
我不确定我正在进一步贡献这个主题,但我仍然认为我会分享:我曾经发现这个博客帖子有几个非常有用的(也许非常基本的)解释和例子关于Big O:
通过例子,这有助于在我的<unk>子像<unk>子一样的喉<unk>中获得细微的基本,所以我认为这是一个相当下载10分钟的阅读,让你走在正确的方向。
这里来了大O,告诉我们这个数学是多么艰难。
现在他们要求我添加一个到十个!为什么我会这样做?我不想添加一个到六个?添加一个到十个......好......这会更难!
对于大 n 而言, n 平方比 n 更大。
一个:我选择一张卡在我们现在工作的地板部分,你可以为我选择一个,如果你愿意(第一次我们这样做,“我们现在工作的地板部分”是整个地板,当然。
大 O 告诉我们:这个类型需要 O(n log n) 工作完成,在中间情况下。
现在你知道我的朋友,大O,他帮助我们做不到工作,如果你知道大O,你也可以做不到工作!
你和我一起学到了这一切!你太聪明了!谢谢你!
现在这个工作已经完成了,让我们玩吧!
上述说法是一个很好的开始,但不是完全真实的。
更准确的解释(数学)
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时间复杂度算法吗?
- 如何使用JavaScript比较软件版本号?数量(只)
- 在常数平摊时间O(1)中将一个对象追加到R中的列表?
- 跳跃表vs.二叉搜索树
- 如何使四舍五入百分比加起来为100%
- 是否有可能得到一个函数的所有参数作为单一对象内的函数?
- LL和LR解析之间的区别是什么?
- log(n!) = Θ(n·log(n))?
- C语言中位反转的高效算法(从MSB->LSB到LSB->MSB)
- 递归还是迭代?
- 什么是“P=NP?”,为什么这是一个如此著名的问题?
- 两个长度不等的表之间的排列