文章吧-经典好文章在线阅读:《算法(第4版)》读后感精选10篇

当前的位置:文章吧 > 经典文章 > 读后感 >

《算法(第4版)》读后感精选10篇

2022-05-13 16:32:21 来源:文章吧 阅读:载入中…

《算法(第4版)》读后感精选10篇

  《算法(第4版)》是一本由塞奇威克 (Robert Sedgewick) / 韦恩 (Ke著作,人民邮电出版社出版的平装图书,本书定价:99.00元,页数:636,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。

  《算法(第4版)》读后感(一):很好读的算法书,但个别地方似乎没讲清楚,阐述一下我的理解

  这本书有很多图,英文电子版还是彩图,读起来确实轻松愉快,另外还提供了质量很高的完整java代码,对java程序员更是加分项,在帮助理解的同时还示范了如何写高质量的代码。

  完整读下来印象中有个别地方没讲清楚或者说不好理解,以下阐述一下我的理解:

  1.KMP

  DFA构造是难点,核心就是重启状态,书里解释了当前状态和重启状态的关系,给出了重启状态的公式:

  x = dfa[pattern[j][x];

  但没有解释这个公式是怎么得来的。其实对初学者来说需要稍微解释一下,这里是一个递推的思路,

  j=0时没有重启状态,从j=1是开始,显然无论pattern是什么,这时的重启状态x都应该是0,有这个初值递推就可以开始了。如果前一个的重启状态是x,那么下一个重启状态是什么呢?下一个重启状态不就是前一个重启状态在当前字符输入后的迁移状态嘛,dfa表就是用来查这个的啊,用当前的输入字符查dfa表,就是dfa[pattern[j][x];

  其他部分讲解都很清楚就不赘述了。

  2.霍夫曼编码

  霍夫曼编码算法精巧,实现过程也很清晰,但难的是怎么知道它是最优的,书里给了一个最优性证明,不知道别人什么感觉,我的感觉是证得不明不白,很难理解,特意找了英文电子书看,发现不是翻译的问题。自己查了一些资料才算弄明白,要想理解霍夫曼最优性,需要两个关键idea:

  idea1.所有叶子节点的频率*编码长度(深度)之和等于编码后比特字符串的长度,这个是显然的,书里也说了。

  idea2.所有节点(包括内部节点和叶子节点,根节点除外)的频率之和等于编码后比特字符串的长度(内部节点的频率等于其子节点频率之和),这其实是从另外一个角度看,编码时每个字符是途经多个内部节点直到叶子节点。霍夫曼编码过程其实用到内部节点频率的计算,但书中在说明最优性时没有用它来理解及证明。

  根据这两点,特别是idea2就可以理解为什么霍夫曼编码时最优的。按照霍夫曼编码的方法很容易看到,编码树所有(包括内部节点和叶子节点,根节点除外)频率高的节点深度总是小于等于频率低的,假设存在更优的编码树,那么通过节点互换(如果是内部节点用子树),总能得到比之更优的:例如这个最优的编码树总长度为w,取其中任意两个节点node1, node2,频率分别为f1,f2,深度分别是h1,h2, 根据idea2,节点互换后的总长度(节点1移到节点2,节点2移到节点1)等于w+(h2-h1)f1+(h1-h2)f2=w+(h2-h1)(f1-f2),

  如果这个两个节点不满足霍夫曼编码要求,即f1>f2,且h1>h2,互换后总长度减少,说明互换后编码更优。

  另外,如果是h1=h2,即节点平行互换,那么w不变,这意味着霍夫曼编码并不是唯一的

  虽然对于编程应用来说详尽的证明不是很重要,但从逻辑上理解其思路还是很重要的。

  总的来说本书很不错,翻译的也可以,强烈推荐!

  《算法(第4版)》读后感(二):一点琐碎感想

  这是工作七年来读完的第一本大部头. 这本书是2014年买的, 买完后一直没下决心去读, 放了两年多才开始读.

  为什么要读这本书呢? 首先我是Java程序员, 对Java很熟悉, 而这本书就是用Java语言描述算法. 其次, 我认为算法是每一个coder都绕不过去的基础, 不管用什么语言, 算法都是以后能力提升的瓶颈. 算法和每种语言的具体技术或者是框架就好比是道和术, 掌握了算法这个"道"这些外围的"术"都不是问题. 大学时学数据结构和算法这门课就是为了通过考试, 学完就都忘了. 工作以后很少有机会自己去实现算法, 都是调用已有的库, 导致我算法这一块很薄弱, 每当看技术书或者是面试问到算法时心里都很虚.

  读这本书用了一年多的时间. 开始读这本书没有给自己规定多久要看完, 只是想仔仔细细的读, 所以每一节我都会读3-4遍, 但读到后面的时候发现前面很多也都忘掉了. 这本书一定不能像我这样拖得时间太长, 4-6个月读完一遍比较好.

  读这本书的过程中发现带着目的去读一本书是一种很好的读书方法. 对于算法这本书, 我读这本书的目的: 不查阅手册就能够写出基本算法的实现. 所谓基本算法就是这本书中出现的算法. 对于书中的算法分析看不懂的话直接跳过, 只看结论, 留着以后再看. 记住算法实现就够了.

  这本书不能只是看懂就好, 里面的算法一定要自己敲一遍才行.

  第一章的1.2 数据抽象和1.4 算法分析一定要仔细读, 是全书的基础. 第二章到第五章要仔细看, 涉及到的算法一定要敲一遍. 第六章过一遍就好, 看不懂也不用太纠结. 第四章图论是个相对独立的一章和前后关联不是很强, 只有在第五章正则表达式的NFA的构造会用到有向图中的知识, 里面涉及到的算法不是很难理解, 但就是忘得比较快, 需要经常回顾.

  对于我来说这本书里面最难理解的是KMP算法中的DFA数组的构造, 豆瓣的里面LastK的回答对我的帮助很大: https://book.douban.com/subject/19952400/discussion/59623403/

  下载原版的pdf来作对比阅读也是个不错的方式.

  这本书的在线网站提供的ppt也是理解一些知识点的很好的参考: https://algs4.cs.princeton.edu/lectures/

  吐个槽. 有一点我一直不能理解, 为什么不能像原版一样把这本书印成彩色的? 这本书本来定价就是99块钱不算便宜, 如果是彩印的话很多人也不会介意再多花几十块, 这样阅读体验会提升很多, 不用总往前面的彩图翻了.

  三月初读完的这本书, 又花了大概一个月时间复习了一遍所有算法. 写了这些并不意味着这本书以后就束之高阁了. 每过一段时间就还要把这本书的基础算法拿出来再刷一遍.

  以下是我总结的读完这本书需要掌握的基本算法:

## 最基本算法二分查找. P28, P241的基于有序数组的二分查找.队列的链表实现. 算法 1.3 P95栈的链表实现. 算法 1.2 P94; 栈的数组实现(动态调整数组). 算法 1.1 P88背包的链表实现. 算法 1.4 P98## 排序相关算法插入排序. 算法 2.2 P157 部分有序和小规模数组有效希尔排序. 算法 2.3 P163自顶向下归并排序. 算法 2.4 P171 算法框架, 主要是P170 merge 方法的实现快速排序. 算法 2.5 P182 算法框架, 着重看P184切分(partition)算法.三向切分快速排序. P189基于堆的优先队列. 算法 2.6 P202 需要看P200 swim方法和P201的sink方法的实现.索引优先队列. API P203, 具体实现需要看github源码堆排序. 算法 2.7 P206## 符号表相关算法基于二叉查找树的符号表. 算法 3.3 P252 算法框架. 主要看 P252算法3.3(续1)中的get和put方法实现; P261算法3.3(续4)deleteMin和delete方法实现红黑树插入算法, P281; 还需要看红黑树的右旋和左旋算法, P277; 颜色转换, P279; 删除最小键和删除算法需要看书对应的代码实现.字符串的hash算法, P294; Horner算法, P506链表法散列表, 算法 3.5 P297线性探测符号表, 算法 3.6; 还需要看P302 delete方法实现; P304 resize方法实现.## 图相关算法无向图数据类型实现, P336深度优先搜索, P339; 解决问题: 两个顶点连通性问题.使用 深度优先 搜索查找无向图中的路径, 算法 4.1, P343; 解决问题: 单点路径问题.使用 广度优先 搜索查找无向图中的路径, 算法 4.2, P346; 解决问题: 单点最短路径问题.使用 深度优先 搜索找出无向图中的所有连通分量, 算法 4.3, P349union-find(加权quick-union)算法. 算法 1.5续 P145无环图的判断以及二分图的判断, P352有向图数据类型的实现, P366有向图的可达性(DFS), P367寻找有向环. P372拓扑排序(逆后序). P375Kosaraju算法(强连通分量), 算法4.6 P380, 用到了union-find算法.加权无向图 和 加权无向边 的数据结构, P395Prim算法即时实现(MST), 算法4.7 P403Kruskal算法(MST), 算法4.8 P406边松弛relax方法实现, P418; 顶点松弛, P419Dijkstra算法(最短路径), 算法 4.9 P423无环加权有向图的最短路径算法(拓扑排序), 算法 4.10 P427Bellman-Ford算法, 算法4.11 P438## 字符串相关算法键索引计数法(步骤要搞清楚), P458低有效位排序(LSD), 算法 5.1 P459高位优先字符串排序(MSD), 算法 5.2 P462三向字符串快速排序, 算法 5.3 P469基于单词查找树的符号表(R向Trie树), 算法 5.4 P479三向单词查找树. 算法 5.5 P486最长键(longestPrefixOf), P481; delete操作, P482KMP算法. 算法 5.6 P500; DFA数组构造, P499正则表达式模式匹配(NFA理解). 算法 5.9 P524Huffman压缩算法. 算法 5.10 P547LZW压缩算法. 算法5.11 P552; LZW展开算法. 算法 5.11(续) P554

  《算法(第4版)》读后感(三):强烈推荐 少年们入门的第一本算法书

  先说观点,本书极好!

  虽然一些IO方面有用到自身的API库,但完全不妨碍算法讲解。虽然是Java,但既然只要C/C++基础,那么相信毫无困难,更何况前面还有Java的一些入门讲解。对比之前看过的数据结构与算法的书,要么翻译不到位,要么陷于模版范性过于复杂,要么算法不够精简。

  而这本书的翻译相当好,毫无膈应感。(国内其他渣翻译实在应该好好学习)。代码实现和规范都相当优雅和简约清晰,称得上是我看过讲得最清楚,实现最清晰的算法书。特色应该就是里面的各式插图,非常直观。更配合上Coursera上的Algorithms课程,如有神助。

  最后,如果你想通过一本书就入门,那么我推荐它。

  《算法(第4版)》读后感(四):经典之能让本学渣看懂,学到东西,不打瞌睡的书便是好书

  个人觉得是我见过的最简单易懂的算法入门书籍。

  以前搜刮过几本算法竞赛书,但是难度终归太大【好吧,其实是自己太懒了】。

  略翻过教材,大多数水校的教材,大家懂的。好一点的也是那本国内的经典,不是说它写的不好,只是没有这一本好。

  本书Java实现,配有大量的图解,没有一句难懂的话,而且全都是模块化实现。

  讲的都是实用算法,没有那些高大上听着名字就让人感到很害怕的东西,个人觉得比CLRS实用性要强,更加适合入门的学习。

  大一,推荐这本书入门

  【有C语言基础即可,自己去搜索下如何用Java写出Hello World就没有问题】

  大二,推荐这本书从头到尾好好读一遍,做下上千道的课后习题

  【后面的有点小难度,但是难度不大值得一做,听起来很多的样子,用心去做,相信很快就可以做完的】。

  大三,推荐这本书,重新温习已知算法,为找工作,考研做准备。

  【可以试着自己在纸上全部实现一遍】

  大四,依旧推荐这本书,没事重温经典,当手册来查也不错。

  edgwick 红黑树的发现者,Donald E.Knuth 的得意门生,对各种算法都有比较深入的研究,他的书,我想不会太差。

  也许对于数据结构的学习涉及的内容比较少,没有动态规划,图论也只是讲了很基础的东西,字符串中KMP弄的过于复杂(对比于acm)。但是瑕不掩瑜,对于绝大部分内容真的讲的超级清楚,完美的图解,就像单步调试一样,也许是一本不需要智商就能看懂的算法书(习题应该略有难度,还没有做,打算上Princeton的公开课时同步跟进)。至少这是一本让我这个算法渣渣看了爱不释手,怦然心动的书。

  完美学习资源:

  Coursera公开课:https://www.coursera.org/course/algs4partI

  (听说已经开课两期了,最近即将开课的时间是2014/09/05号那期,希望有兴趣的同学一起来学习)。

  MOOC平台(笔记、讨论等):

  不得不吐槽,他的lecture比他的书好,他本人讲的课更是一绝。

  互补课程:

  快毕业了才接触到豆瓣和MOOC,看到很多经典的书籍都是推荐大学一二年级的学生看,每每想到自己却连书皮都没有摸过,就深感惭愧。

  我们都老的太快,却聪明得太迟。

  《算法(第4版)》读后感(五):非常好的算法入门书

  还没看完就迫不及待来评论一下。这本书写的是在是棒极了。之前看过第一版的和第三版的,和这版最大的区别是之前都是用C语言实现,这版是用的Java,所以也叫了Algorithms而不是Algorithms in C。刚看的时候不得不说很失望,因为本人不是很喜欢Java,但看了第二部分,竟然非常感谢这版的代码是用Java写的,虽然我仍然没有对Java的喜欢之情,但不得不说代码都很简洁,美观。在这里当然要提一下人民邮电出版社,这本书本身的质量非常有保证,清晰的彩印,厚实的纸张。内容都是很基础的入门,但是相比其他的书籍阐述的已经算是非常好了。现在在图书馆看,还没入手,等看完了一定买一本收藏。

评价:

[匿名评论]登录注册

评论加载中……