大o表示法的o_现在,您需要了解Big O表示法。

大o表示法的o

Blake ConnallyUnsplash拍摄的照片

您的算法可能很慢,并且除非您学习此基本技能,否则您甚至可能不会注意到它。

许多程序员创建的算法原来很慢,但他们不知道它很慢。 我们需要一种方法来衡量算法运行所需的时间。

我们如何测量算法运行多长时间?

我们可以运行10,000次算法并测量平均花费的时间,但这会造成问题。 假设我们有一个算法,可以获取购物清单并打印出购物清单中的每个商品。 如果购物清单最多包含3个商品,则该算法可能需要3秒钟才能运行。 如果购物清单中有10件商品,则可能需要10秒钟才能运行。

这里制造一个问题。 我们如何知道“完美”的输入大小是什么,以获取算法花费多长时间的“完美”度量? 因此,我们使用一种称为Big-O(发音为Big Oh)的表示法。

大0表示法是用于描述算法效率的一种表示法。 知道此表后,Big-O很容易阅读:

它们越靠右,花费的时间就越长。 Big O标记使用这些功能来描述算法效率。 以我们的购物清单为例,则算法为O(n)。 我们不知道购物清单中有多少个商品,因此我们给它一个古兰经的变量,例如n。 然后,我们将每个项目打印到需要花费o(n)时间的屏幕上。

让我们遍历其中的每一个。

不变

常量算法是一种在输入大小变大时不会花费更多时间的算法。 让我们看一个简单的例子:

所以这里的数字很小,但是:

花费大致相同的时间。 但是,如果数字过大怎么办?

这些数字是硬编码的。如果输入50,它将仍然将这两个数字加在一起。 因此,根据输入大小,无需花费更多时间将它们添加在一起。 它们不随输入大小缩放。 他们是一个常数。

登录n

您可能想知道“ log n是什么”? 好…

对数有时称为对数。 通常以2为底的二进制文件,但可以有所不同)。 让我们做一个简单的例子:

在此示例中,要求的是“ 3赋予您9的力量”。 因此,这是3乘以2的幂得出9,所以整个表达式如下:

对数算法在每次运行时将列表“减半”。 这就是二进制搜索(稍后说明)。 如果给该算法列出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的密码,以便对所有组合进行暴力破解:

组合通过。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值