《我的第一本算法书》读后感

为什么选择这本书

《我的第一本算法书》作为一本入门的算法书,读起来简单而流畅。前后210页的书费时4个小时读完。让我对基本的算法原理和常用的数据结构有一个较为清晰的了解。

以前十分抗拒学数据结构和算法,光是看到那些名字都看不懂的算法和不明所以奇奇怪怪的数据结构(链表,队列,堆,栈),我逆反的心理顿时升起。毕竟人都是懒惰的,要动用大脑来思考这些复杂又看上去和生活没什么用的算法,往往会越看越焦虑。加上网上质量参差不齐技术博客讲解这些算法,学起来没头没尾的,还不如不学。

所以,我需要一本全面且简单的算法入门书,介绍算法的同时也让我了解它的用途,它的由来,对我们现代生活有什么意义。而不是讲一个算法就直接上编程实现。毕竟如书中所说

算法和程序的区别:程序是用编程语言(计算机能理解的语言)写的,而算法是以人类能够理解的方式描述的,用于编写程序之前。

况且我的编程能力也不强,容易一头扎进某个具体代码究竟是什么意思这样的怪圈,费时费力还容易抑郁。

这本书纯文字的内容很少,多数时候是图文并茂的,讲解中的数学部分也是点到为止,可以让你能清楚明白其中的机理,又不会在知识收益率低的地方深究。这就是为什么此书读起来简单易懂,酣畅淋漓。


《我的第一本算法书》读后感_第1张图片

我收获了什么?

我一直以来,被各种厉害的软件和大神所震撼,以为计算机是天生强大的。但此书开篇就纠正了我这个误区。为什么这是误区呢?持有「计算机天生十分强大」这样的想法,我编程的时候往往想要一步到位,想要找寻某个方法,一下子如魔法一般解决问题。但其实事实不是这样的。

计算机擅长高速执行一些基本命令,但无法执行复杂的命令。

此处的“基本命令”指的是 “做加法”或者“在指定的内存地址上保存数据”等。

计算机是以这些基本命令的组合为基础运行的,面对复杂的操作,也是通过搭配组合这些 基本命令来应对的

上文中提到的“对 n 个数字进行排序”对计算机来说就是复杂的操作。如何设计算法来解决这个排序问题,也就等同于构思如何搭配组合计算机可以执行的那些基本命 令来实现这个操作。

不是「计算机十分强大」,而是计算机背后的编程人员十分强大。 想要变强,就必须要掌握如何让计算机组合基本的命令来实现复杂的操作。通览全书,作者无不围绕这一简单的理念来剖析各种算法,一目了然。

爱因斯坦在《物理学的进化》中提到

事物真正的原理,往往都是简单的

学会以简单的剑来剖析事物的原理,是一生的必修课。

书的结构

全书分为7个章节,序章介绍算法的基本知识,如时间复杂度等。对时间复杂度的解释,比斯坦福的算法课要好懂的多。

那么,如何测算不同输入所导致的运行时间的变化程度呢?

最为现实的方法就是在计算机 上运行一下程序,测试其实际花费的时间。但是,就算使用同样的算法,花费的时间也会根据 所用计算机的不同而产生偏差,十分不便。

所以在这里,我们使用“步数”来描述运行时间。“1 步”就是计算的基本单位。通过测试 “计算从开始到结束总共执行了多少步”来求得算法的运行时间。 

第一章:数据结构:

讲解了7个数据结构,链表,数组,栈,队列,哈希表,堆, 二叉查找树。简单易懂,一扫我之前的恐惧。要熟悉这些数据结构并且在实际运用中熟练的使用,还需要练习,重中之重。

第二章:排序

经典的排序算法都有涉及,也是十分好懂。背后的思想有浅浅涉及。

第三章:数组查找

主要介绍线性查找和二分查找。

第四章:图搜索

广度优先,深度优先

贝尔曼-福特,狄克斯特拉,A* 最短路径求解算法。

第五章:安全算法:

看得有点困,不是搞网络安全的,除了和哈希函数有关系之外,其他部分当作课外读物增长见识来读吧。有点理解为什么网页之间要什么数字证书,加密之类的了。

第六章: 聚类

就讲了什么聚类,以及k means 算法。

第七章: 其他算法:

欧几里得,素性测试,网页排名,和汉诺塔



重要掌握部分

数据结构和排序算法(基础)--原理推导

图搜索算法(人工智能相关) --重点攻克

递归相关算法


后续读物

《算法图解》--《算法新解》--《算法的乐趣》

《算法神探:一部谷歌首席工程师写的CS小说》

你可能感兴趣的:(《我的第一本算法书》读后感)