数据结构与算法阅读指南 Beta

什么是数据结构与算法?

🔎学习数据结构与算法之前,我们要理解什么是数据结构与算法。

数据结构,就是一组数据的存储结构。

算法,就是操作数据的一组方法。

数据结构是为算法服务的,算法要作用在特定的数据结构之上。

基于上面的说法,我们基本可以说:程序 = 数据结构 + 算法

为什么要学习数据结构与算法?

至于为什么要学习数据结构与算法,不同的人有不同的看法。

在校学生:学习数据结构与算法,夯实基础以后可以参加ACM举办的程序设计大赛,扎实的数据结构与算法功底可以帮助在校学生拿到比赛名次,这对于未来校招都很重要。很多大公司,比如 BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。很多学生虽然技术(框架运用)不错,但每次去面试都会“跪”在算法上,很是可惜。那你有没有想过,为什么这些大公司都喜欢考算法呢?校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察他们的基础知识是否牢固,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中学生们的长期潜力。

普通程序员:学习数据结构和算法,可以帮助普通程序员提高写代码的能力,业界有一个共识:数据结构与算法是程序员的基本功,也是内功,更是编程的基础。很多普通程序员在面试心仪公司的时候,面试官都会考察程序员数据结构与算法,他们也往往在平时忽略了数据结构与算法,当面对算法题的时候,常常束手无策,从而与心仪公司的Offer失之交臂。

高级程序员:高级程序员在设计系统的时候,例如存储系统,该用何种数据结构来构建索引引擎,是使用Hash还是二叉树还是B+树,这往往都是数据结构的应用,如何来检索索引,这往往是算法的应用,深厚的数据结构与算法功底,可以帮助高级程序员设计出高效的检索引擎,好的算法、合适的数据结构,搭配起来可以实现O(1)的时间复杂度,这会比O(n)甚至O(n^2)的算法性能更高!

如何学习本专栏?

  • 掌握一门编程语言

很多人说,数据结构与算法和编程语言无关,学习数据结构和算法主要是学习它的编程思想。对于这种说法,笔者对后半句比较认同,但是前半句,笔者则抱有不同的意见。数据结构与算法本身确实是与语言无关,任何编程语言对数据结构都有相应的实现,但是如果读者对任何一门编程语言都不熟悉,那学习数据结构与算法也将收益甚小。拿Java来说,如果读者不清楚HashMap的自动扩容机制,那么在编码的时候,可能会忘记在创建HashMap容器的时候给予初始容量,那么后期在存储数据的时候,就存在扩容现象,这样就增加了整体耗时,程序性能降低。如果一开始就知道存储数据的数量,那么在初始化HashMap的时候就可以直接赋予合适的初始容量,这样性能就不会有损耗。感兴趣的读者可以关注笔者的另外两篇文章:《深入理解JDK7 HashMap》、《深入理解JDK8 HashMap

  • 采用『理论 + 实践』的方式

本专栏采用的基本方式是『理论 + 实践』,每一章第一节都是对当前的数据结构与算法的理论知识进行讲解,后面的小节都是对与本小节相关的leetcode上的经典算法练习题进行讲解和剖析。相信读者在『理论 + 实践』相结合的学习方式下,肯定会有所收获。

章节安排

基本章节安排如下,后续将各个章节的基本小节也列出,方便大家检索🎉

第一章 数组

第二章 链表

第三章 哈希表

第四章 字符串

第五章 栈与队列

第六章 二叉树

第七章 回溯算法

第八章 贪心算法

第九章 动态规划