大o表示法的o
![](https://i-blog.csdnimg.cn/blog_migrate/201a54fed1bff6c29d13281e92678934.png)
您的算法可能很慢,并且除非您学习此基本技能,否则您甚至可能不会注意到它。
许多程序员创建的算法原来很慢,但他们不知道它很慢。 我们需要一种方法来衡量算法运行所需的时间。
我们如何测量算法运行多长时间?
我们可以运行10,000次算法并测量平均花费的时间,但这会造成问题。 假设我们有一个算法,可以获取购物清单并打印出购物清单中的每个商品。 如果购物清单最多包含3个商品,则该算法可能需要3秒钟才能运行。 如果购物清单中有10件商品,则可能需要10秒钟才能运行。
这里制造一个问题。 我们如何知道“完美”的输入大小是什么,以获取算法花费多长时间的“完美”度量? 因此,我们使用一种称为Big-O(发音为Big Oh)的表示法。
大0表示法是用于描述算法效率的一种表示法。 知道此表后,Big-O很容易阅读:
![](https://i-blog.csdnimg.cn/blog_migrate/d6411004f641b41e743487b04a93d41e.png)
它们越靠右,花费的时间就越长。 Big O标记使用这些功能来描述算法效率。 以我们的购物清单为例,则算法为O(n)。 我们不知道购物清单中有多少个商品,因此我们给它一个古兰经的变量,例如n。 然后,我们将每个项目打印到需要花费o(n)时间的屏幕上。
让我们遍历其中的每一个。
不变
常量算法是一种在输入大小变大时不会花费更多时间的算法。 让我们看一个简单的例子:
所以这里的数字很小,但是:
花费大致相同的时间。 但是,如果数字过大怎么办?
这些数字是硬编码的。如果输入50,它将仍然将这两个数字加在一起。 因此,根据输入大小,无需花费更多时间将它们添加在一起。 它们不随输入大小缩放。 他们是一个常数。
登录n
您可能想知道“ log n是什么”? 好…
对数有时称为对数。 通常以2为底的二进制文件,但可以有所不同)。 让我们做一个简单的例子:
![](https://i-blog.csdnimg.cn/blog_migrate/77ac619cf0b3460d9c2adba9c8b18977.png)
在此示例中,要求的是“ 3赋予您9的力量”。 因此,这是3乘以2的幂得出9,所以整个表达式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6d5bdcf82d2e08166207a6b8b430e175.png)
对数算法在每次运行时将列表“减半”。 这就是二进制搜索(稍后说明)。 如果给该算法列出10个项目,例如:
a = [1, 2, 3, 4, 5, 6 , 7, 8, 9, 10]
算法每次都将其减半,如下所示:
a = [1, 2, 3, 4, 5]
a = [1, 2, 3]
a = [2]
然后,它是一个对数函数。
多项式时间
如果我们有以前的购物清单,它看起来像这样:
a = ['water', 'vegetables', 'Bose QC35']
如果您遍历列表中的每个项目并大声说出来,那么复杂度将为n。 这是因为列表中有n个项目,并且项目数可以增加或减少。
因为它使输入时间加倍。 例如:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in a:
for x in a:
print("x")
如果看到如上的嵌套for循环,则为n²;如果为3个嵌套for循环,则为n³,依此类推。
指数的
这种算法是所有算法中最慢的。 例如,您有一个仅由数字组成的密码(因此,这是10个数字,从0到9)。 您想破解一个长度为n的密码,以便对所有组合进行暴力破解:
组合通过。
![](https://i-blog.csdnimg.cn/blog_migrate/3a784a46b035a2cf0a18eecdd65f62f5.png)
在大O表示法中,我们始终使用最坏情况进行计算。 计算机科学家是乐观主义者。
简化大O符号
如果您的算法看起来像O(n +n²)怎么办? 好了,有一些超级有用的规则可以简化您的算法。
删除常数
如果您有一个描述为O(2n)的算法,请删除2,使其成为O(n)。
删除非主要条款
O(n²+ n)变为O(n²)。 仅将较大的一个保留在Big O中。
如果您有一个特殊的总和,例如O(b²+ a),那么您也不会丢掉任何一个,因为不知道b和a是什么。
摘要
打赌,您期望获得有关Big O的一些难以理解的指南吗? 好吧,这就是全部。 您需要记住(或学习)层次结构,采用一些算法并找出它们的Big O表示法是什么。
大O代表算法需要花费多长时间,但有时我们也关心算法需要花费多少内存(空间复杂度)。
还有其他形式的测量算法时间复杂度的方法,例如Big Theta,它是算法花费的最少时间。
请继续阅读下一篇有关搜索算法以及如何在书店中找到书的文章!
如果您喜欢这篇文章,请与我联系!
翻译自: https://hackernoon.com/you-need-to-understand-big-o-notation-now-4ada3d2ec93a
大o表示法的o