学习算法应该边看书,边敲代码,边做题练习,之后在实际项目中寻找应用的机会。
学习算法也是要分三步走:
第一步先夯实基础,学习每个算法的基本思想,解题思路和应用场景;
第二步对学习的算法知识进行归纳总结,提升对算法的熟练度,做到融会贯通;
第三步则是提升思考高度,将各类算法之间的区别和联系搞清楚,做到举一反三。
在这个阶段,首先要明确我们为什么要学习算法,要弄清楚算法有什么用,而不是屠龙术。学习算法是为了提升自己的逻辑思维能力,提升编程思想,在做到对应业务的时候,能够想到可以通过某某算法来实现,而不是通过一对笨方法,写一堆“笨重”的代码。
在这个阶段推荐大家看以下几本书:
1. 《算法图解》:
这本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。
书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法等
2. 《算法第 4 版》:
这本书全面讲述算法和数据结构的必备知识,是算法领域的经典参考书,内容全面,且和实际应用相结合,用丰富的视觉元素展示的示例,精心设计的代码,详尽的历史和科学背景知识,各种难度的练习让新手容易上手。
这本书使用 Java 写的示例,虽然编程语言都是相通的,但是买之前要知道这一点。
3. 《数据结构和算法分析 - C 语言描述》
本书是国外数据结构与算法分析方面的标准教材,介绍了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。本原书曾被评为20世纪顶尖的30部计算机著作之一。
在本书中,作者更加精炼并强化了他对算法和数据结构方面创新的处理方法。通过 C 语言程序的实现,着重阐述了抽象数据类型的概念,并对算法的效率、性能和运行时间进行了分析。
全书特点如下:
●专用一章来讨论算法设计技巧,包括贪婪算法、分治算法、动态规划、随机化算法以及回溯算法 ●介绍了当前流行的论题和新的数据结构,如斐波那契堆、斜堆、二项队列、跳跃表和伸展树 ●安排一章专门讨论摊还分析,考查书中介绍的一些高级数据结构 ●新开辟一章讨论高级数据结构以及它们的实现,其中包括红黑树、自顶向下伸展树等内容 ●合并了堆排序平均情况分析的一些新结果
1.《算法导论(原书第3版)》
这本书是一本算法领域的大辞典,最权威,最详细,覆盖面最广,当然书内容也最多。适合进阶阶段学习。
2.《编程珠玑》
本书是计算机科学方面的经典名著。书的内容围绕程序员面对的一系列实际问题展开。
在书中,作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和总结了许多独特而精妙的设计原则、思考和解决问题的方法以及实用程序设计技巧。
解决方案的代码均以C/C++语言编写,不仅有趣,而且有很大的实战示范意义。每章后所附习题极具挑战性和启发性,书末给出了简洁的解答。
3.《剑指 offer》
本书是面试必备啊,本书讨了论面试每一环节需要注意的问题;面试需要的基础知识:从编程语言、数据结构及算法三方面总结程序员面试知识点;高质量代码:讨论影响代码质量的3个要素(规范性、完整性和鲁棒性),强调高质量代码除完成基本功能外,还能考虑特殊情况并对非法输入进行合理处理;
解题思路:总结编程面试中解决难题的有效思考模式,如在面试中遇到复杂难题,应聘者可利用画图、举例和分解这3种方法将其化繁为简,先形成清晰思路再动手编程;优化时间和空间效率:读者将学会优化时间效率及空间换时间的常用算法,从而在面试中找到最优解;面试必备能力:总结应聘者如何充分表现学习和沟通能力,并通过具体面试题讨论如何培养知识迁移、抽象建模和发散思维能力;
综合面试案例:总结哪些面试举动是不良行为,而哪些表现又是面试官所期待的行为;英文版面试题增补,优选久经欧美知名企业面试考验的经典题目,帮助国内读者开阔视野、增补技能。
不要一直看书,一边看书一边跟着书里的例子敲敲代码,熟能生巧。并且刷一刷 LeetCode。
1. 常用的数据结构:数组、字符串、链表、树(如二叉树)等
2. 常用的算法:分治、贪心、穷举、动态规划、回溯、二分算法、深度优先搜索等
推荐一个算法可视化解法的项目:
此外,再推荐一些免费的学习资源:
在学习的时候,要想为什么要这样设计,优点在哪里,有什么改进方法,逐步通过这样的方式提升逻辑思维能力。不懂就查,找学习资料和相关解答,坚持学习。
1. 算法学习 LintCode:https://www.lintcode.com/
算法学习网站,上去每天刷两道算法题,走遍天下都不怕。
2. 算法学习 LeetCode:https://leetcode.com/
也是算法题网站,同上。
3. 算法学习 LeetCode 中文站:https://leetcode-cn.com/
这个是上面算法题网站的中文站点,英文不好的可以刷这个,英文好的推荐去刷英文网站的题目,还能提升英语能力。
4. 中国大学MOOC网:https://www.icourse163.org/
中国大学MOOC是由网易与高教社携手推出的在线教育平台,承接教育部国家精品开放课程任务,向大众提供中国知名高校的MOOC课程。在这里,每一个有意愿提升自己的人都可以免费获得更优质的高等教育。
对你有用的话,点个赞再走吧~