算法:解释大O符号

640?wx_fmt=jpeg

〖★导 言★〗    


本文旨在用简单的术语解释Big O表示法。大多数学生和程序员都理解O(n)和O(1),但是理解O(log n)有点困难。本文将尽可能的简单解释这三个基本的Big O符号。

〖★ 什么是算法?★〗    


算法是用于完成某个操作或解决问题的方法。我们都知道解决特定问题的方法不止一种; 同样,有一种以上的算法可以解决给定的问题。

这是一个场景:如果有一个以上的算法/步骤来解决问题,我们怎样才能找到哪个更好或更有效?

为了表示算法的效率,使用Big O表示法 - 例如O(n),O(1),O(log n)。

常见的大O符号是:

  • O(n):线性时间操作。

  • O(1):恒定时间操作。

  • O(log n):对数时间运算。

为了理解Big O表示法,我们需要理解恒定时间操作,线性时间操作和对数时间操作。

现在让我们逐步学习这些带有示例/问题的Big O符号。


〖★ O(n):线性时间操作★〗    


要解决的问题:假设我们有一个包含数字的卡片或印有数字的卡片(如1,2,3,4,... 16),我们会被问到是否在框中有数字6。我们需要做什么?

一次选择一个号码并检查我们选择的号码是否为6(要搜索的号码)。

如果我们选择的号码与要搜索的号码匹配,那么我们就是好的。否则,我们需要从框中选择另一个号码。这种一次挑选一个数字并验证它是否一个接一个地匹配直到所有n个数被挑选的方式称为线性操作。这种搜索n个数字的方式表示为O(n)。如果要查找的数字是最后一个数字(最坏的情况),我们需要选择所有n个数字。

 
 



〖★ O(1):恒定时间操作★〗    


要解决的问题:假设我们得到一个数字框(1,2,3,4,... 16),并且在框外打印,该框包含16个数字。系统会询问您框中有多少个数字/项目。因为你知道盒子被标记为包含16个球,你回复说该盒子包含16个。如果另一个人第二天问你同样的问题,你可以通过查看盒子再次回答,即使你得到另一个100盒子它中的数字,如果它有一个标签,说该框包含100个数字。这称为恒定时间操作。它表示为O(1)。

 
 


〖★ O(log n):对数时间操作★〗    



要解决的问题:假设我们有一个包含数字(1,2,3,4,... 16)的框,所有数字都是有序的。系统会要求您在框中找到16号。这里的问题是数字是有序的。我们将数字分成两部分。总共16个数字被分成两组,每组包含八个数字。

 
 


数字16大于分割中的最大元素,因此要搜索的数字将仅分为2.继续此分割,直到找到数字的末尾或要搜索的数组。

从而:

640?wx_fmt=jpeg


看看上面的图片,我们可以找到4个步骤的数字(在16个数字的列表中)。

可以写成,

640?wx_fmt=png


在数学中,如果 n = 2 x则log 2 n = x。(参考二进制对数)

因此16 = 2 4可以写为log 2 16 = 4。

这可以写为log  n,或简称为O(log n)。

因此,需要四个步骤来在包含16个数字的框中找到一个数字,每个步骤将该框分成两个(这也称为二分搜索)。


〖★ 另一个例子 ★〗    


例如,如果我们有64个数字,那么可以导出查找数字的最大步数,如下所示,

64 = 2 6 这可以写为log  64 = 6.因此,在64个数字的列表中找到一个数字需要最多6个步骤。

〖★ 结语 ★〗    


首先谢谢大家对“人工智能架构”公众号的支持,由于最近关注的小伙伴增加,针对大家在后台的留言,有一些小伙伴可能基础稍微薄弱一点,因此,在本次文章中,我们针对某些小伙伴的问题,选择发表了本文的内容。大家有什么意见和建议,欢迎积极踊跃的留言。你们的支持,是我们最大的动力。


长按订阅更多精彩▼

640?wx_fmt=jpeg


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值