文章吧-经典好文章在线阅读:《数据结构》经典读后感有感

当前的位置:文章吧 > 原创文章 >

《数据结构》经典读后感有感

2020-05-04 23:21:02 来源:文章吧 阅读:载入中…

《数据结构》经典读后感有感

  《数据结构》是一本由邓俊辉著作,清华大学出版社出版的平装图书,本书定价:39.00元,页数:389,特精心网络整理的一些读者读后感希望大家能有帮助

  《数据结构》精选点评

  ●邓老师对这门课程真的非常用精美的 PPT 和动画、长期在线助教、对数学灵活运用,上这门课真的是一种享受

  ●配上邓老师的学堂在线课程更佳

  ●作为教材使用,书是彩色的,看起来赏心悦目,至于内容安排可能还需精简。

  ●又是一本被神话的书,作者代码质量和北大的郭炜比起来,真的是差了很多

  ●可能为了照顾初学者用了比较详尽表达,但是复习时候就觉得内容稍微有点啰嗦...

  ●数据结构入门书籍配合邓老师的MOOC以及习题解析,终于算是啃完了一块大骨头,接下来Leetcode刷起来~

  ●强推这本,国内会写书的老师真不多。。。还有他的MOOC。。。浙大陈越的MOOC也强推

  ●讲的很全,但是讲的不是很通俗易懂,适合有基础的人

  ●2018.8

  ●读了这本书可说是没学数据结构,电子自己用的教材就是辣鸡好吗

  《数据结构》读后感(一):学习数据结构极好的书

  本书有几个特点:

  1 组织有序,轻重有序

  2 语言简练,通俗易懂

  3 注重算法拓展性,注重算法的分析,注重算法的正确性

  4 排版精美,图的比例非常大

  5 有配套的网络课程,邓老师是一个非常棒的老师

  你可能会有的几点疑惑:

  1 为什么使用C++?

  这个原因在作者的第一章有所体现(作者讲了算法必须满足几个要求,其中一点就是健壮性, 也即通用性),另外C++的抽象能力非常棒,而且使用C++能写出非常简练优雅的代码

  2 怎么使用?

  详读,并且购买配套的习题练习

  3 阅读之后的体验

  非常棒,超值.

  《数据结构》读后感(二):这可能是国内最好的数据结构教科书

  作者很用心最新版已经是全彩图的了,国内少有

  个人觉得这本书也有美中不足地方

  比如说

  1.全书中的(lo + hi) >> 1 可以改为 (lo + hi)/ 2 ;

  因为随着优化器的技术的进步,现代常用的编译器都可以对后一种情况进行优化成前面的形式。不必为了所谓性能降低可读性;

  2.众所周知,cpp资源管理一直都是很容易出错的。只要保证RAII和谁申请释放这两个原则就不会有问题。书中BinNode由上层的Tree来释放资源,很容易就内存泄漏了;

  3.没有对拷贝构造和赋值拷贝这两个函数进行处理;

  4.对BinNode进行操作的宏太多了,放到BinNode里成为静态成员函数会更好一点。宏这东西是没有类型的,书中的宏既有对BinNode处理的有对BinNode*处理的,根本分不清.

  5.图结构也有问题,删除点之后,之前送到外面的比当前节点索引大的会失效,指向错误的节点。

  加一个getIndex(),remove节点之后重新获取节点编号

  《数据结构》读后感(三):最适合初学者学习的数据结构书籍

  这本书是目前看到的最适合初学者自学的数据结构书籍,没有之一。

  当然,说最合适自学,前提条件是要配合邓老师的MOOC视频和讲义看。

  邓老师说过了,本书仅是讲义的子集。而且最新的修订还没有在书中得到体现,我个人手头有纸质的书,比较容易查看,但是也需要结合邓老师的讲义及习题解析一起观看(邓老师的讲义和习题解析见:https://dsa.cs.tsinghua.edu.cn/~deng/ds/dsacpp/index.htm)。这个网站提供了最新的讲义和习题解析文档,如果不想买书(对实体书没有依赖)的话,我觉得网站上的这两个讲义及习题解析配合MOOC视频足够了。

  当然,如果不配合邓老师的视频,这本书做不到最适合初学者。因为这本书就是邓老师教学视频的一部分而已,很多视频中的动画演示和讲解都无法全部顾忌,所以在不少地方显得突兀。所以,再次建议一定要配合视频以及讲义观看。讲义设计的内容比MOOC视频更多,MOOC视频并没有体现,可能只有清华的同学们才能听到MOOC视频中没有的部分吧,只能遗憾。

  对于有数据结构基础的,想进一步深入的,我无法提供更多建议,因为自身就是初学者(有不少人推荐Sedgewick的《算法4》)。但是看都有人评论说为什么没有用到C++11特性?大部分算法和数据结构书籍的作者,包括邓俊辉老师,包括《算法4》的作者等都说了,数据结构和算法要学的是它的思想,而不是它的载体。这些数据结构书籍的目的是让你了解其原理和内在思想,在以后遇到类似问题能够想起这些原理,而不是让你拷贝代码直接用。

  现在说说书本和MOOC视频的一些缺点,但这些缺点瑕不掩瑜,不影响我给满分推荐。由于本书就是MOOC视频的子集,我就直接对MOOC视频评论了。

  最后两章——第十一章的“串”和第十二章的“排序”有些粗糙了,感觉没讲透,让人云里雾里。我分析了一下让人感觉云里雾里的原因其实就是实际例子举少了,而且所用例子个人感觉不太恰当。视频的精华就是各种各样的例子非常多,所以初学者容易理解,但是到了最后两章例子就少了,不太清楚为什么。

  《数据结构》读后感(四):说一说这本书的不足之处

  这本书看了有几个月了,确实是国内比较好的数据结构书。好处大都说了,我来说说看书过程中遇到的不足之处。

  1. 首先是喜欢用一些奇技淫巧,感觉带着一些竞赛色彩。比如其他书评提到的(lo + hi) >> 1; 另外还有while (0 < n)这种代码,虽然无伤大雅,但看着总是比较难受,甚至令人烦躁。

  2. 还是奇技淫巧,喜欢写if (a = b),while (a = b)这种在布尔条件里赋值的代码,当然这也没有错,但对读者来说就增加了阅读负担,甚至在开始造成了迷惑(这也有我自身水平不足的原因)。毕竟代码的可读性很重要,不过也许是作者想压缩一下排版空间。

  3. 有些代码是为了后面的章节做准备的,但作者在书中并没有写出来,这会造成迷惑。另外有些函数已经声明了却没有实现,令人一头雾水。比如第五章二叉树里面的BinNode::size()函数和release函数。size()函数我在视频里看到了,当然代码写的有点投机取巧,也没有考虑边界条件。release函数一直没找到。对于swap这种简单函数可以不写实现,但对于复杂一些的函数还是应该说明一下,至少给个API让读者可以自己实现吧。

  4. 代码中几乎都没有考虑奇异值或边界条件,也没有异常处理。当然这个是比较苛责的了,可以说是过分要求。因为这不是本书的主要任务。但是能给出一二还是会更好的。

  5. 数学风格非常浓厚,但有些数学证明并不清晰易懂,所以只好跳过不看了。但书中第一章对于时间复杂度的分析结合视频给了我很多收获。

  6. 代码风格不是特别好,不是纯正的C++ Style,还是夹杂了不少C语言的写法。比如不用class而用struct(这句话有我个人色彩,因为我很不喜欢用struct,一是封装性不好,二是struct这个词看着太难受了。)另外喜欢用C风格字符串而不是string,平添了处理麻烦,这里在第四章用栈实现计算机那里比较明显,最后我只好用string加迭代器改了一遍。而且喜欢用宏,这一点在二叉树那里非常多,简直让人疯掉,也不解释一下参数类型,我自己是全部写成了inline成员函数。这本书写的比较早,可能C++11还没普及,再版的话建议添加C++11新特性,更多的使用C++ Style Code。

  7. 排序的内容比较分散。在第二第三章介绍了归并排序,插入排序,选择排序等,因此在后面的排序一章就没有介绍了,这就使内容比较分散。还不如专门一章介绍排序。

  目前大概有这些想法,书我看得挺慢的,还没看完。以上就当作我的逼逼歪歪小吐槽吧,毕竟在看书的时候也是好多次被难以理解的语句和代码弄得心烦意乱想破口骂娘,对书的评价和期待也从一开始的满分慢慢降低下来。也许看到某一章后面就换其他书看了。数据结构的书这么多,想找一本完美的可真难。

  2019.2.26补充:已经放弃读这本书了,实在是看着书上不多解释而又晦涩的代码要骂娘。推荐一本我之前看的数据结构方面的书。

C++数据结构与算法8.4[美]乔兹德克(Adam Drozdek) / 2014 / 清华大学出版社

  C++数据结构与算法,Adam Drozdek著,徐丹,吴伟敏译,清华大学出版社出版。这本书也有写的不好的地方,但总体我觉得比较详细,而且习题出的非常好(就是没有答案)。书中有部分疏漏之处,自己大体上能改正。代码风格和排版都比邓书要好,至少不会让人读着火大。邓书的参考文献里也有这本书,大家可以自己去看一下。

  《数据结构》读后感(五):启发思考比获取答案重要 ——经典的价值

  作为一个非计算机专业出身,也没有参与过IT技术层面实现的人,在这个清明节假期,以一种必死的心态,去啃这本《数据结构》。

  结果呢?说实话,真香!

  尽管语言细节和如何实现一如预期的全看不懂,但我都略过了。一本差不多400页的专业书,只用了不到3个小时翻完,而且收获居然还非常大。收获主要是思维层面的。更确切点说,启发我去思考了几个大问题。

  一、技术(或者广义点,工具)的本质是什么?

  为什么有数据结构?因为要厘清数据的逻辑次序与物理存放位置。OK,把scope放大些。

  为什么有信息技术?因为人类有更强的,对物理世界进行(虚拟的)逻辑化呈现与表达的诉求。OK,把scope再放大些。

  为什么有工具?因为我们希望能对现实世界能有更清晰的认知和更强的改造能力,能更好地解决现实问题。

  所以,工具的本质是帮助我们分析问题和解决问题。但是最关键的定义问题环节,工具(至少是现阶段的)爱莫能助,定义问题(或者是目标)仍然绝对的依赖于问题解决者,也就是工具的使用者。

  换一个角度,工具的边界也在这里。人如果要想不被工具替代(例如我们现在爱说的机器替代人),就要在定义问题和目标的能力上下功夫,挖掘价值。

  二、工具的能力的本质又是什么?

  第一点里面提到了,是(帮助人)分析问题和解决问题,也就是支持从未知到已知。

  数据结构是怎么玩转这个游戏的?转化。弄清了最基础的“线状”对吧?然后“树形”向“线状”转化,“图”又向“树形”转化。

  在这个纷繁复杂眼花缭乱的转化过程中,分清哪些是变化的,哪些是不变的,就很重要了。例如对于计算而言,数据是常变的,实现的语言是常变的,但算法和数据模型则是不常变的。就如同(阶段性的)思维能力不常变,而思考对象常变。

  三、设计工具的基本原则是什么?

  正因为定义问题的是人,定义系统目标的也是人。所以工具的设计要基于实际应用的需求,先确定功能规范和性能指标。

  就以数据结构为例,引入列表结构,是为了弥补向量结构在解决某些应用问题时,在功能及性能方面的不同。二者的差异,表面上体现于外在的操作方式,但根源则在于其内部存储方式的不同。

  为什么会这样?因为数据结构的本质就是为了解决对信息的分类和排序。所以工具使用者,为了通过工具实现不同的目标,从而在设计工具时采用不同的内部结构。

  四、如何判定工具的好坏?

  某种意义上,工具没有绝对的好坏。一种工具如果长期存在,必然有其合理性,而它的价值发挥则更多取决于工具使用者和问题的结合。

  例如数组和链表,前者发现目标所需时间为常数,而修改目标所需时间为线性;后者反过来,修改目标时间为常数,而发现目标时间为线性。哪个好?这很大程度上其实取决于你的样本空间大小,以及发现和修改数据的行为场景和频率。

  俗话说“机关枪打蚊子”,机关枪打蚊子何止是成本比苍蝇拍高,效果都不如苍蝇拍好吧。

  由此我得出一条经验:多读经典,哪怕并非是你的专业领域的,很大概率会比在专业中一直深挖细枝末节的边际收益来得要高。

  诺贝尔经济学奖得主阿马蒂亚·森曾这么说:

  “考察一个人的判断力,主要考察他的信息渠道和信息来源的多样性。有无数的可怜人,长期活在单一的信息里,而且是一种完全被扭曲、颠倒的信息,这是导致他们愚昧且自信的最大原因。原谅他们吧,因为他们的确不知道真相。”

评价:

[匿名评论]登录注册

评论加载中……