【在厨房想30天的演算法】Day 02 想着想着想到一个 Big O

Aloha!又是我少女人妻Uerica!第二天了,真是令人兴奋,因为後面要怎麽写我都还没想好啊~哈哈哈哈!昨晚躺在床上想了一夜都睡不着,一直在想...明天要吃什麽?


演算法优劣的评估与判断

好的~延续昨天的话题,若要用程序写出某个结果,通常都不会只有一种演算法,那在这麽多演算法中要如何评估与选择才是最适合的呢?虽然影响演算法优劣的因素有很多,但一般拿来评估与判断的有两个面向:演算法执行的时间长短(时间复杂度),以及演算法执行时需要耗多少记忆体(空间复杂度)。

  • 时间复杂度 : 执行时间的长短
  • 空间复杂度 : 消耗的记忆体

大大的 O 是 Big O

探讨演算法的效能时,常用渐进符号 Big O 来表示与描述执行演算法的步骤数或占用的记忆体空间。

时间复杂度 Time Complexity

这里的时间复杂度所探讨的就是程序执行的时间。就像昨天提到的,做料理时,如果没有有效率的料理步骤,往往差到一天的时间都是有可能的,但因为每个人家里的厨具好坏、锅子的大小等,都会影响到料理完成的快慢,所以为了更客观的判断,在计算执行时间时,都是使用 “步骤次数” 来计算。

直接来颗栗子!今天来做嫩煎鸡翅吧~

  1. 首先需要的食材有:油、腌过的鸡翅、调味料 (输入 Input )
  2. 开火
  3. 下油与热油锅
  4. 将所有鸡翅倒入锅子里
  5. 一个个翻面并将鸡翅煎至金黄
  6. 加调味料
  7. 起锅!将锅子的鸡翅倒入盘中!
  8. 热腾腾的嫩煎鸡翅好啦(输出 Output)

由上述例子来看,我们完全不考虑锅子大小,并且鸡翅只需翻面一次,调味料也早已按鸡翅份量调好的请况下,大家有发现最有可能增加步骤的地方在哪里吗?

没错~就是鸡翅数量与鸡翅翻面的部分!

上面的嫩煎鸡翅食谱中,无论鸡翅多寡我们都只需要开一次火、加一次油、下一次调味料,最後再将所有鸡翅一次倒入盘中!只有鸡翅需要一个个翻面的部分会受到鸡翅的多寡所影响而增加步骤与时间。

好的!那我们把上述那颗栗子数字化吧!

要做一道嫩煎鸡翅,开火需要 Ta 的时间、下油与热油锅要 Tb 的时间、将所有鸡翅倒入锅中要 Tc 的时间、翻一只鸡翅需要 Td 的时间,在这边若有 n 个鸡翅则需要 n * Td 的时间,加调味料要 Te 的时间、起锅要 Tf 的时间。

这里的时间复杂度就是 Ta + Tb + Tc + n * Td + Te + Tf = O(n)

因只需判断与比较不同演算法的效率,所以只着重在最受影响的部分。在演算法图监一书中有提到,O 这个符号表示 "忽略重要项目之外的部分" 的意思。以上述的例子来看,除了鸡翅的数量外,其他都是不变的常数,所以在此使用O(n)来表示此演算法的时间复杂度。


啊哈~今天先到这里啦!写着写着就困了。话说我以前超爱吃鸡翅冻,还常常跟同学一起团购省运费,但我每次都会拿去微波,不知道哪天突然发现鸡翅冻好像是要吃那个冻的状态 XDD


<<:  #1-连结Hover动起来!(CSS 伪元素)

>>:  [Day 2] 阿嬷都看得懂的前端与後端怎麽分

Day01 - 铁人赛我又来罗

避免像去年一样焦头烂额,这次提前至 7 月开始准备铁人赛, 即便提早准备,也不知要写什麽... 只准...

Python 学习笔记_装饰器(decorator) 与重试(retry)

这篇文章主要是在纪录 python decorator 的学习过程, 有错或是更好的写法的话,欢迎留...

Day 34 (MySQL)

1.除错 MySQL02影片00:01 2.MAD利用命令列进入MySQL $ % = 终端机 (1...

[Day29] Maker making IoT完赛心得与一些後续的期待!

完赛结语 今天是我们团队首次参加30天铁人赛的完赛日,老套路了,首先要感谢每个对本系列文章订阅与观看...

用程序码画个1/4圆的按钮

缘由: 相信身为开发者一定对UIButton不陌生,原本制式化的按钮为方形,可以用程序码产生,甚至在...