原文链接:https://medium.com/@daily_javascript/a-friendly-guide-to-big-o-ea781c5f68f0

算法复杂度

并不是每个公司在面试的时候都会问关于算法复杂度大O的问题,但是如果你想要到Facebook、Google或Amazon这样的公司工作的话,这是你必须要了解的知识。如果你没有很好的数学功底,那么你去看课本上关于大O的概念的话将会是一场灾难。

1Let T(n) = the number of operations performed in an algorithm as a function of n.
2T(n) = O(f(n)) if and only if there exists two constants, n0 > 0 and c > 0, and a function f(n) such that for all n > n0, cf(n) ≥ T(n).

那么我们就一起来学习一下它的数学证明吧。开个玩笑,实际上证明要比概念复杂得多(译者:不会就直说嘛)。

回想一下,你是否曾经接受过这样的任务,为了完成它,你需要按照指定的步骤,一步一步来执行。在计算机科学中,这一系列指定的步骤被称为算法。

在现实生活中,我们为了完成一项任务,往往会寻找更好的办法:更快、更便宜、或者更明确的方法。算法也是一样,我们常常需要更好的算法来实现。但是我们怎么知道哪种算法对计算机而言是更好的呢?

一个比较直观的方法就是,选择不同算法之中,完成同一项任务用时最短的那个,也就是我们常说的运行时间最短的。不幸的是,我们没有办法精确的比较出哪个算法的运行时间更短,因为它受很多因素的影响。

例如:

  • 写算法所用的语言

  • 相同语言的版本差异

  • 计算机硬件差异,每次读取数据的大小

我们能做的是通过计算算法从开始到完成一共做了多少步工作来近似的比较两个算法的运行时间。所以我们应该做出一些假设,而不管每个人使用的硬件和语言的差异,找到一个公认的方法来比较不同算法解决问题的能力。

假设1:

计算机每次从上到下读取一个步骤

假设2:

定义变量、调用函数、逻辑对比以及所有的算术运算都被当成一个步骤

假设3:

内存是无限大的,而且访问任何位置的数据所消耗的时间是一样的

做出了上面的假设之后,我们来看一个简单的例子:

1function m(a, b) {
2    ans = 1
3
4    while(b > 0) {
5        ans = ans * a
6        b = b - 1
7    }
8    return ans
9}

这个算法先定义了一个变量,这是一个步骤;然后开始了循环,这是三步(比较、乘法、减法)。最后返回变量,这也是一个步骤。所以这个算法的总步骤就是

12 + (3 * b)

如果b=100,这个算法就要进行302步,

如果b=1000,这个算法就要进行3002步,

如果b=10,000,这个算法就要进行30,002步。

可以看到,由于我们不需要精确的比较,所以数字2对结果的影响微乎其微。这就是为什么当我们计算大O的时候,你只需要关心影响最大的因素,而可以忽略常数以及影响较小的因素。我们再来看一个例子:

1x + x^2 + x^3

你可以放心的忽略掉x和x2,因为它们没有x3对结果的影响大。

大O只是用来判断运行时间增加的速率,也叫作渐近分析。

所以我们已经知道了如何计算大O,但是我们怎么知道要选择哪些影响因素呢?我们需要尽可能大的输入,来忽略常数和低阶因素。大O表示的是最坏情况,这才是最有意义的比较结果。

PS:我的博客支持评论功能啦!小伙伴们有什么想法可以点击阅读原文,到对应的文章下面留言。

往期精彩回顾

看都看完了,还不点这里试试

【译】大O的友好指南相关推荐

  1. 大数据架构师指南 pdf_ZTE十年大数据架构师教你:高效搭建企业IT系统架构,超越CTO...

    前言 如果你是一名IT工程师,首席技术官( CTO)希望你在一周内提交一份公司未来IT系统基础架构的初步建议;如果你是一位IT营销人员,客户需要你在一周内向他汇报未来大数据系统的大致技术方向... . ...

  2. 十大司机如厕友好城市出炉:苏州/杭州/成都位居前三

    4月1日消息,近日,高德地图发布<2022全国公共厕所图鉴>(下称,<图鉴>),依据近百个城市2021年公共厕所线上搜索和导航数据,选出了十大厕所数字化城市.十大司机如厕友好城 ...

  3. 「Upwork高手攻略」月入1-4万,一个低门槛的大机会,入门指南

    [Upwork高手攻略]月入1-4万,一个低门槛的大机会,入门指南 前言 Upwork高手攻略,解读跨境自由职业高手快速成长的秘密[Upwork高手攻略]月入1-4万,一个低门槛的大机会,入门指南 每 ...

  4. 各大公司样片申请指南

    各大公司样片申请指南 文章来源:http://www.ednchina.com/blog/colinzhang/123393/message.aspx 做项目常常避免不了申请样片,原因无外这几种情况: ...

  5. 【转】各大公司样片申请指南

    各大公司样片申请指南 文章来源:http://www.ednchina.com/blog/colinzhang/123393/message.aspx 做项目常常避免不了申请样片,原因无外这几种情况: ...

  6. 学习大数据分析python编程指南

    每个人都喜欢Python.如果您打算开始从事数据科学事业,我们可以肯定Python在您心中已经占有特殊的位置.它直观且易于在任何平台上运行,并且具有大量令人惊叹的库和工具.与其他编程语言相比,Pyth ...

  7. 《全国一体化政务大数据体系建设指南》发布,隐私计算将如何发挥作用?

    10月28日,国务院办公厅发布印发<全国一体化政务大数据体系建设指南>(以下简称<指南>)的通知,<指南>指出,建立完善政务大数据管理体系,推进政务数据资源开发利用 ...

  8. [译]函数式响应编程入门指南

    原文地址:An Introduction to Functional Reactive Programming 原文作者:Daniel Lew 译文出自:掘金翻译计划 本文永久链接:github.co ...

  9. 神策数据丨九大行业数字化经营指南集锦,值 100% 收藏

    每一份白皮书.报告和案例的开始都有一个共同点:对各行业的数字化满心期许.我们希望为更多企业在数字化转型之路上提供可靠.可信.可落地的方法论与实践指导,为数字化时代的到来贡献绵薄之力. 2021 年末, ...

最新文章

  1. 新一代的树莓派3版本——Raspberry Pi 3 发布了
  2. DMG MORI AKTIENGESELLSCHAFT
  3. ROS与Arduino学习(六)Logging日志
  4. python简易_Python简易爬虫
  5. displaytag 相关
  6. 互联网日报 | 爱奇艺会员宣布11月13日起涨价;淘宝特价版月活用户破7000万;我国成功发射一箭十三星...
  7. 2018年最值得关注的15大技术趋势
  8. python上传钉钉媒体文件_钉钉媒体文件上传
  9. Android学习笔记09:Paint及Canvas的简单应用
  10. [UE4]蓝图的颜色
  11. 陈广老师 C#语言参考视频打包下载地址
  12. Python小程序练习一之登陆接口
  13. 十大排序算法——计数排序(C语言)
  14. 计算机开启网络共享,一键开启共享_局域网win7访问xp_打开默认共享命令
  15. jenkins插件镜像源
  16. 用python获取实时地球图像作为壁纸(windows)
  17. 阿里双十一购物节背后的技术问题
  18. oppo系统工程师暑期实习生面经(已OC)
  19. leyou商城day10 MQ介绍及详情静态页
  20. python爬虫(四)数据存储

热门文章

  1. Unity UnityWebRequest: InvalidOperationException: Insecure connection not allowed
  2. 深入浅出DirectShow Filter(转)
  3. php编码代码工具,php制作unicode解码工具(unicode编码转换器)代码分享_PHP教程
  4. Portal 使用。。。。。
  5. 美国电影协会评出50部一生不得不看的经典电影
  6. 使用React Native编写的一款阅读类app ———《轻松一刻》
  7. java 定义map集合_Java中的Map集合
  8. PHP开发者的Linux学习之路
  9. 【转】Spring AMQP 源码分析 01 - Impatient
  10. 基于Python的Opencv 自动识别银行卡卡号系统