《啊哈!算法》读书笔记
会选择这本书是因为自知自己的水平,所以在豆瓣搜索算法书的时候搜索关键字是“算法入门书籍”,得出的结果里面就有这本书,被它的书名吸引就选择了这本书做读书笔记。
从结构上来看,书中基础的数据类型、数值运算都涉及到了,并且配合图解都解释的非常清楚,很好理解,但是比较复杂一些的指针和文件都没有写。
涉及的数据结构有栈、队列、链表、树、并查集、堆和图等;
涉及的算法有排序、枚举、深度和广度优先搜索、图的遍历,当然还有图论中不可以缺少的四种最短路径算法、两种最小生成树算法、割点与割边算法、二分图的最大匹配算法等。
从实例来看,基本上是数字游戏,从比大小、排序等简单的,到验证质数、找水仙花数等较复杂的。
以下是我从各个章节挑选的印象比较深的内容:
第一章排序
1.桶排序
第二章栈、队列、列表
1.模拟链表
上图的两个数组中,第一个整型数组 data 是用来存放序列中具体数字的,另外一个整型数组 right 是用来存放当前序列中每一个元素右边的元素在数组 data 中位置的。
如果,现在需要在 8 前面插入一个 6,只需将 6 直接存放在数组 data 的末尾即 data[10]=6。
接下来只需要将right[3]改为10,表示新序列中3号元素右边的元素存放在data[10]中。
再将right[10]改为 4,表示新序列中 10 号元素右边的元素存放在data[4]中。
这样我们通过 right 数组就可以从头到尾遍历整个序列了(序列的每个元素的值存放在对应的数组 data 中),使用模拟链表也可以实现双向链表和循环链表。
第三章枚举
1.暴力枚举问题
可以思考是否采用深度优先搜索和广度优先搜索
第四章图
1.Bellman-Ford——解决负权边
平时上课接触的都是正权边,这次看到负权边就有点不知道怎么办。Dijkstra算法虽然好,但是不能解决带有负权边的图,Bellman-Ford算法可以解决负权边的最短路径问题。
这是一本非常有趣的编程启蒙书,全书从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。从开始学习与计算机对话到自己独立制作一个游戏,由浅入深地讲述编程的思维。
它的书名虽然叫《算法》,但是更应该算是一本C语言入门教程加基础算法的书。我认为这本书最好的一个地方在于这是一本为了解决问题而引入概念的启发式教学书籍,避开了大量生硬的概念和公式。
虽然这本书是写给中小学生的,但是我作为一个已经学过C语言和算法课的大学生来看似乎也没有太大的违和,可以当作复习巩固,有些上课一知半解还没理解的知识点,在这里配合可爱的图解和故事也可以理解的更深了一点。但是书里的代码部分为了讲解清楚就会比较繁琐,我们自己在看的时候有很多代码可以进行优化。