Data Structures and Algorithm Analysis in C (数据结构与算法分析) 读书总结

重点把前面十章看了一下,后面两章感觉对我现阶段用处不大,就没有细看。因为之前把严蔚敏版的《数据结构》好好看了一遍,所以看这本书比较轻松,下面我谈一谈看完之后的感受。


首先本书与严蔚敏版《数据结构》最大的区别就在于“算法分析”上面,《数据结构》一书的重点是介绍基本的数据结构,所以关于算法和算法的复杂度分析比较少,但它在讲述链表、栈、队列、树及图等基本数据结构非常清晰而且很详细,每种数据结构给的实现伪代码比较多,比较适合初学者。而《数据结构与算法分析》一书因为名字就多了个算法分析,所以其重点不光是介绍基本的数据结构,对于一些常用的算法及分析算法的复杂度的常用方法做了比较详细的介绍,本书的第二章就是专门介绍一些有关算法分析的预备知识。本书对于基本的数据结构这一块没有严书详细,特别是关于树和图的那一章,我感觉看严书的话应该更好理解一些。但是本书关于数据结构的内容更广阔,特别是在树这一章,介绍了一些在严书中没有提到的数据结构,如Splay Trees, 而且本书还特别开了一章讲解Heaps(Priority Queues), 记得当时看严书的时候就是这个Heaps这一块没有怎么弄懂,而在本书中关于堆的这个概念讲解的非常好,除了主要的Binary Heap外还介绍了几个变种,如Leftist Heaps和Skew Heaps. 另外一个比较值得注意的地方就是本书还单独开辟了一章介绍不相交集(Disjoint Set ADT), 开始看名字还不知道是什么,看了才知道这个数据结构严书也讲到过,但没有这是这么详细。可以说,本书在数据结构这一块涉及的内容比严书更加全面,感觉严书重点是在基础上,所以给的代码不少,而本书涉及面广,加之还要讨论算法,所以对于简单的数据结构并没有罗列一大堆实现代码。我觉得对于看过严书的人来说这样的安排非常好,但初学可能会有点吃力。


说完了数据结构,本书在算法分析上面下了大力气,基本每一个例程作者都会给出其时间复杂度,稍微复杂的还会给出证明过程,可以说是一步一步教你怎样分析一个算法的好坏,而且对于对于同一个问题,作者往往喜欢用不同算法解决,由复杂度高到复杂度低,就比较开头提出的字谜游戏和求一个序列中第K大的数,随着不断的深入,作者给出一不同复杂度的算法,然后通过实际的测试,我们会发现一个好的算法能多大的提高一个程序的效率!这些东西在严书里面基本上没有很清楚的讲解。在第九章介绍图论算法时,作者还涉及到了算法正确性的证明,证明了Dijkstra最短路径算法的正确性,而在第六章介绍排序算法时,作者证明Shellsort, Mergesort等算法的时间复杂度时那让人头晕的分析和数学公式,可以看出作者是个非常严谨的人,也让我对于什么是算法研究有了个初步的认识,这玩意原来这么复杂!


本书还有一个特色就是第十章的算法设计,也是我最喜欢的一章,作者能过实际的例子介绍了Greedy Algorithms, Divide and Conquer, Dynamic Programming(动态规划), Randomized Algorithms 和 Backtracking Algorithms 5个在实际编程中非常常用的算法,我在TopCoder上看到好像比较难的题目大部分都是用Dynamic Programming做,之前还特地上wiki看了一个算法的介绍,但直不得要领,作者用那个矩阵相乘的例子让我真是大开眼界,瞬间对Dynaminc Programming有了个直观的认识,后面的最优查找树算法Floyd算法在严书中看到过,但当时就觉得想到这算法的人好牛,根本没有体会到其中的蕴含的思想,觉得看本书的话这一章一定要好好看,体会其中的思想,一定能有大收获。


以前不知道何为编程能力,就觉得自己编程能力算比较好的了,现在想想,以前写的就是渣啊,没有算法,数据结构只有链表和栈,只是会实现简单的功能,碰到复杂的算法问题就束手无策了,自从自学了数据结构就感觉到算法的重要性了,算法是程序的灵魂,一个优秀的程序一定要精通各种算法,在解决实际问题时才能选用正确的算法,或根据已有的算法改进出适合实际问题的算法,以前看他们会用C++做个图形啥的就觉得很吊,现在觉得这些东西都没有什么技术含量,只要有份API文档,学几天就会了,但算法这种东西真是没办法速成,我现在就是算法这一块太差了,不过还好在看别人的博客时发现了TopCoder这个非常好的编程平台,里面的题目用来作为算法练习太恰当了,而且还可以看大神的代码,学到了不少东西,强烈推荐! 这里我转载了一篇关于TopCoder 的教程,有兴趣的朋友可以看一下。文中提到的运行平台在这里下载,点击这个"Load Competition Arena"图标 ,会下载一个后辍为jnlp的文件,装有java的话直接双击这个文件就可以运行了。


自己算法方面还是太水了,要多做TopCoder上的练习,加油!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页