大数据初学者论文_初学者的大O

大数据初学者论文

照片由apoorv mittalUnsplash拍摄

大O表示法使我们能够测量代码的时间和空间复杂度。

考虑一下for循环的示例。 您可以在5个项目的数组上运行它,它将很快运行,但是如果在10,000个项目的数组上运行它,则执行时间会慢得多。 看一个例子:

大O表示法使我们能够计算出算法要运行多长时间。 这使我们了解了一段代码将如何扩展。 它测量算法效率。

O(1)

这称为恒定时间。 每个执行的时间是一致的。 想象一下,如果您是加油站服务员。 加满汽车只需要25秒,然后该特定任务就被认为已经完成。 当天填满一辆汽车或一百辆汽车都没关系,您已经在一致的时间内填满了汽车。

因此,按照上面的示例,我们不在乎O(1),O(2)等。我们将其四舍五入为O(1),这就是说我们的操作在可伸缩性方面是一条平线。 这将花费相同的时间。 这是可预见的并且非常可扩展。 看一个例子:

上)

我们的循环示例为O(n),因为它针对输入中的每个值运行。 根据输入,运算以线性方式增加。 (n)表示输入数量。 该算法以线性时间运行。

O(n²)

假设我们要记录一组项目中的一系列对。 我们可以这样做:

一个好的经验法则是,如果看到嵌套循环,则可以使用乘法来计算符号。 因此,在上面的示例中,我们正在做O(n * n),它变为O(n²)(n为平方的O)。 这称为二次时间,这意味着每当元素数量增加时,我们就二次增加操作。

实际上,您希望避免在O(n²)中运行的代码,因为当您引入更多元素时,操作数量会大大增加。

计算大O

要计算Big O,您可以遍历每一行代码,确定它是否为O(1),O(n)等,然后最后返回您的计算。 例如,它可能是O(4 + 5n),其中4代表O(1)的四个实例,而5n代表O(n)的五个实例。

但是,有一种更简单的方法来计算此值,并且可以通过以下四个规则来完成:

  1. 假设最坏的情况
  2. 删除常数
  3. 使用不同的术语进行输入
  4. 放弃任何非优势

依次进行以下每个操作:

  1. 假设最坏的情况

在计算Big O时,您总是会想到最坏的情况。 例如,如果您要遍历数组并查找某个项目,则该项目可能是第一个项目,也可能是最后一个项目。 由于不确定,因此我们必须在这种情况下假设O(n)。

2. 删除常量

这有点棘手,但请耐心等待。 考虑以下代码:

我们有一个功能可以执行几项操作。 有些是O(1),例如第3行,而另一些是O(n),例如第9行。

我们可以将Big O表示为O(1 + n / 2 +100),但它确实太具体了。 我们可以删除O(1)运算,因为根据经验,与O(n)运算相比,它们可能无关紧要。 如果我们要在输入数组中提供一百万个项目,那么我们主要关心的不是O(1)的另外100个操作。

因此,我们得到O(n / 2)-随着n越来越大,将其除以2的效果会减小。 因此,最终我们对该函数的Big O表示法变为O(n)。

3. 输入的不同术语

如果我们要在同一数组中循环两次,那么我们的Big O从技术上讲就是O(2n),但是让我们删除常量,让我们剩下O(n)。 但是现在我们需要考虑输入的不同术语。 那是什么意思?

如果看上面的代码,我们可以看到现在有两个输入。 一个可能是一个项目长,另一个可能包含一百万个项目。 因此我们的函数不再是O(n),而是O(a + b)。 我们在符号中使用的n是任意的,因此我们需要在符号中反映两个输入。

在这种情况下,我们的循环不会嵌套。 如果是,那么我们的代码将是O(n²),这将是重构的潜在目标。 通常,如果存在嵌套循环,则您是在进行乘法运算而不是相加变量。

4. 删除非主要术语

看一下这段代码:

因此,我们在顶部有一个单循环,它是O(n),然后是一个嵌套循环,它是O(n²)。 因此,我们的总数为O(n +n²)。 但是,正如我们在规则2中看到的那样,我们想删除常量。 那么,这两个术语中的哪一个对我们来说更重要?

在这种情况下,我们丢弃O(n)并保留O(n²),因为这更为重要。 它是主要术语,因为它会对性能产生更大的影响。

结论

那有什么意义呢?

如果我们知道只处理少量输入,那么Big O并没有太大关系。 但是在编写代码时,应考虑其可伸缩性。

通过关注Big O,您可以展望未来,并且更有可能编写可以有效扩展的代码。 您可以开始查看代码成本,并在编写代码时做出明智的选择。

资源资源

http://bigocheatsheet.com/

翻译自: https://hackernoon.com/big-o-for-beginners-622a64760e2

大数据初学者论文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值