数据结构和算法并不是一门教人编程的课,它们可以脱离任何的计算机程序设计语言,而只需要从抽象意义上去概括描述。说的简单一点,数据结构是一门告诉你数据在计算机里如何组织的课程,而算法是一门告诉你数据在计算机里如何运算的课程。前者是结构学、后者是数学。

最经典的数据结构是有限的,包括线性表、栈、队列、串、数组、二叉树、树、图、查找表等,而算法则是琳琅满目的,多种多样的。程序设计就像盖房子,数据结构是砖、瓦,而算法则是设计图纸。你若想盖房子首先必须要有原材料(数据结构),但这些原材料并不能自动地盖起你想要的房子,你必须按照设计图纸(算法)一砖一瓦地去砌,这样你才能拥有你想要的房子。

数据结构是程序设计这座大厦的基础,没有基础,无论设计有多么高明,这座大厦不可能建造起来。算法则是程序设计之灵魂,它是程序设计的思想所在,没有灵魂没有思想那不叫程序,只是一堆杂乱无章的符号而已。在程序设计中,数据结构就像物质,而算法则是意识,这在哲学上可以理解为:意识是依赖与物质而存在的,物质是由意识而发展的。双方相互依赖,缺一不可!

入门数据结构和算法的学习方法包含三个部分:

1、选择一本合适的书

十分推荐普林斯顿的这本橙书:《算法(第四版)》,这本书最适合拿来入门的。在橙书中淡化了算法分析和证明,强调了实现和应用,并且通过一些有趣的习题对比显示了优秀的算法与数据结构在时间和空间上的高效。

橙书是使用 Java 进行代码实现,在第一章前两个小章节介绍了全书可能需要使用到的一些简单的 Java 语法,使得我们不会将过多的精力花费在编程语言的学习上。

2、编程实现和应用

理解一个数据结构与编程实现其完整功能是完全不同的挑战。自己动手亲自实现一些基础数据结构(如排序,集合,图和字符串处理)的简化版 API 能够极大的提升对数据结构内部细节的理解。

3、反复学习

因为算法与数据结构所涵盖的知识较多,所以一本书里的内容可能都需要分几个阶段去学习,难免会遗忘之前的内容。建议学习过程中采取敏捷学习,尽量快的往后学习。如果一个知识点实在不懂,可以存疑,“不求甚解”,很多时候经过后面的学习,前面的一些内容就自然明了,然后反复学习。

除了基本的复习,还需要其他书籍进行一些补充和升级。推荐《算法导论》。除显著加强算法分析的能力外,一些算法章节,如摊还分析,动态规划等是对《算法(第四版)》较好的补充。其网上开放课程,中文有网易公开课、B站的优秀Up主的分享等。

4、参考

http://www.mybatis.cn/archives/1746.html