您的位置 : 首页 >> 计算机与互联网电子书

漫画算法 小灰的算法之旅

下载方式

漫画算法小灰的算法之旅(全网阅读量近1000万次的算法故事!!!一群可爱的小仓鼠,带你轻松入门算法与数据结构!) (博文视点图书)

本书作者:魏梦舒

本书读后感· · · · · ·

近期入手了,有点儿遗憾没有拿到签名款。不过这本书真的非常很棒,用漫画的形式讲解知识,生动又形象(感觉小灰和大黄应该是真爱)。里面的例子也都非常贴切。总之是一本很棒的算法入门书籍。趁着618赶紧入手。还可以关注微信公众号“程序员小灰”,每天查看推送,在知识星球讨论,和小灰亲密交流哦。

我的学习笔记

场景2给小灰1个长度为16cm的面包,小灰每5分钟吃掉面包剩余长度的一半,即第5分钟吃掉8cm,第10分钟吃掉4cm,第15分钟吃掉2cm……那么小灰把面包吃得只剩1cm,需要多久呢?

漫画算法 小灰的算法之旅 计算机与互联网电子书 第1张这个问题用数学方式表达就是,数字16不断地除以2,那么除几次以后的结果等于1?这里涉及数学中的对数,即以2为底16的对数1og216。(注:本书下文中对数函数的底数全部省略。)

因此,把面包吃得只剩下1cm,需要5×1og16即20分钟。
如果面包的长度是ncm呢?

此时,需要5乘以1ogn即51ogn分钟,记作T(n)=5logn。
场景3给小灰1个长度为10cm的面包和1个鸡腿,小灰每2分钟吃掉1个鸡腿。那么小灰吃掉整个鸡腿需要多久呢?

人们之所以花大力气去评估算法的时间复杂度和空间复杂度,其根本原因是计算机的运算速度和空间资源是有限的。
就如一个大财主,基本不必为日常花销伤脑筋;而一个没多少积蓄的普通人,则不得不为日常花销精打细算。
对于计算机系统来说也是如此。虽然目前计算机的CPU处理速度不断飙升,内存和硬盘空间也越来越大,但是面对庞大而复杂的数据和业务,我们仍然要精打细算,选择最有效的利用方式。

但是,正所谓鱼和熊掌不可兼得。很多时候,我们不得不在时间复杂度和空间复杂度之间进行取舍。
在1.3.1小节寻找重复整数的例子中,双重循环的时间复杂度是0(n2),空间复杂度是0(1),这属于牺牲时间来换取空间的情况。相反,字典法的空间复杂度是0(n),时间复杂度是0(n),这属于牺牲空间来换取时间的情况。

在绝大多数时候,时间复杂度更为重要一些,我们宁可多分配一些内存空间,也要提升程序的执行速度。

对于数组来说,读取元素是最简单的操作。由于数组在内存中顺序存储,所以只要给出一个数组下标,就可以读取到对应的数组元素。

假设有一个名称为array的数组,我们要读取数组下标为3的元素,就写作array[3];读取数组下标为5的元素,就写作array[5]。需要注意的是,输入的下标必须在数组的长度范围之内,否则会出现数组越界。
像这种根据下标读取元素的方式叫作随机读取。

说起学习英语,小灰上学时可没有那么丰富的学习资源和工具。
当时有一款很流行的电子词典,小伙伴们遇到不会的单词,只要输入到小小的电子词典里,就可以查出它的中文含义。

漫画算法 小灰的算法之旅 计算机与互联网电子书 第2张

当时的英语老师强烈反对使用这样的工具,因为电子词典查出来的中文资料太有限,而传统的纸质词典可以查到单词的多种含义、词性、例句等。

但是,同学们还是倾向于使用电子词典。因为电子词典实在太方便了,只要输入要查的单词,一瞬间就可以得到结果,而不需要像纸质词典那样烦琐地进行人工查找。

在我们的程序世界里,往往也需要在内存中存放这样一个“词典”,方便我们进行高效的查询和统计。
例如开发一个学生管理系统,需要有通过输入学号快速查出对应学生的姓名的功能。这里不必每次都去查询数据库,而可以在内存中建立一个缓存表,这样做可以提高查询效率。

本文版权归原作者所有,请支持正版。此处仅提供个人读书笔记 https://yigefanyi.com/manhuasuanfa-xiaohuidesuanfazhilv/
返回顶部