对算法学习的认识以及书籍推荐

一,对于算法的认识:

原文链接:新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?_ACM算法日常-CSDN博客_算法怎么学

第一次接触数据结构是在大二下学期的数据结构课程。然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——反正最后考试划个重点也能过,于是这门整个计算机专业本科最重要的课程就被傻逼的我直接忽略过去了。

直到大三我才反应过来以后还要找工作——而且大二的折腾证明了我并没有什么商业才能,以后还是得靠码代码混饭吃,我当时惊恐的发现自己对编程序几乎一无所知,于是我给自己制订了一个类似于建国初期五年计划的读书成长计划。

总结

从接触算法到现在,大概七年:初学时推崇算法牛逼论,实习后鼓吹算法无用论,读研后再被现实打回算法牛逼论。

现在来看,相当数量的鼓吹算法牛逼论的人其实不懂算法的重要性——如果你连用算法解决实际问题的经历都没有,那你如何可以证明算法很有用?而绝大多数鼓吹算法无用论的人不过是低水平码农的无病呻吟——他们从未碰到过需要用算法解决的难题,自然不知道算法有多重要。

总而言之,如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。

算法的学习是非常重要的,那算法学到什么程序才算学通?很简单学算法的有个必备的基础功「白板编程」,即用笔和纸就可以把一个算法手写出来。举个例子快速排序,这个算法你脑子里能第一时间把它理清思路吗?随后还能手写的出来吗?

算法是一门非常深奥的学科,除了一些基础的算法,还有非常多更高阶的内容。但要知道所有的编程技术,都是为了解决现实生活中某个实际问题。算法也是如此。

很多人学算法学不明白或者觉得很难,就是因为这些晦涩难懂的算法,在实际的编程中你很难应用到。做编程 90% 的人是没学过算法,但不妨碍有些人开发就是做的牛逼。

然而不懂算法的人,是很难进阶到高阶的岗位,也就是我们俗称的码农。

二,算法学习步骤:

原文链接:如何学习算法?_痴海的博客-CSDN博客

那具体要怎么学算法?

1) 初学者跟着视频学习

算法有很多经典的书籍,但这些书籍都是劝退杀手。当年我在学算法的时候,每看一本算法书,就多产生一点不想在继续学算法的冲动。这些书是非常经典非常好,但对于小白来说太难理解了。

初学者学习算法最好的方式就是跟着视频学,这里我推荐慕课网的bobo老师的算法课。他的算法课通俗易懂,并且每个算法都配有动态演算过程。是我接触到最好的算法入门视频了。

2 )啃书刷题

学完了视频形式的算法课,就可以开始找本经典的算法书籍,开始啃书之旅。

书一定是要啃的,这样你才能进一步提高。当然这时候的学习不能是傻啃,从头看到尾的那种。一定是要带着问题去时常翻阅书籍。

单看书是不行的,这时候就要同时开始配合刷题了,学的东西你不用起来,过一段时间一定会忘记的。你就可以去 leetcode 开始刷题,最开始从简单的难度刷起,逐步到最难等级。

3) 参加算法比赛

前两步你都坚持下来并认真的去做了,那么普通难度的算法对你来说已经没有什么挑战了。这时候你就可以去参加各种算法比赛了。比如蓝桥杯,ACM,LeetCode周赛,牛客网竞赛等等。这些比赛不仅含金量高,而且往往有丰厚的奖金。

如果你能在 ACM 上拿到名次,国内的大厂基本就对你敞开大门。

三,算法学习步骤2:

原文链接:怎样学算法?_慕课手记

第一阶段:基于语言去学习数据结构

首先从最熟悉的编程语言入手,推荐Java或C++,去初窥算法。

所谓初窥算法,本质上就是要对数据结构有一定的了解。数据结构,就是把数据和算法联系起来的桥梁,比如排序、搜索、回溯、贪心、动态规划、树、链表、队列、栈等等,这些属于计算机科学基础,每位准程序员都应该掌握。同样的数据,如果选择的数据结构不同,就会把我们引导到不同的算法上面。

第二阶段:基于数据结构去学习基本的算法

在对数据结构有了一定了解的基础上,就可以对常用的算法进行学习了。比如最基本的各种不同的排序方法:冒泡排序法、选择排序法等等。在此期间,可以加强对“时间复杂度”这一概念的了解,同时开始学习一些更高级的数据结构。

这些更高级的数据结构所适用的场景更为简单,因此与它们相匹配的算法基本都固定了,比如红黑树、二叉堆等,这些数据结构是否会被使用,完全取决于其时间复杂度的情况。因此熟记它们的时间复杂度可以让你在不同场景下选择最优的数据结构。

同时,你还需要学习与“图”相关的算法,如广度优先遍历、深度优先遍历、最短路径等等。这个阶段,你可以尝试学习经典书籍《算法导论》了。

 

第三阶段:基于具体需要和个人兴趣进阶

如果只是要满足基本使用或大多数工作中的需求,那么完成第二阶段基本就足够了(除非你是专门研究算法的)。

到了进阶阶段,更多的是对算法能力的拔高与探索。在此期间,你会触及到人类目前在算法领域的瓶颈区以及一些更为高级的数据结构。在这一步,建议你除了熟读《算法导论》外,还要继续阅读其他书籍,包括一些学术论文。

你可以继续深入探索基础算法,参加ACM比赛获得奖项;也可以用你练就的扎实编程基础去实现一些高级点的思想型算法,比如遗传算法,模拟退火等去解决实际的一些问题;还可以读个研究生深入某个方向去研究计算机视觉,自然语言处理、数据挖掘、分布式等等对数学要求较高的算法,这些都可以让你成长为一名优秀的算法工程师。

祝君学有所成!~

四,算法书籍推荐:

原文链接:新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?_ACM算法日常-CSDN博客_算法怎么学

读书计划的第一步是选择书籍,我曾向当时我觉得很牛的”学长”和”大神”请教应该读哪些算法书籍,”学长”们均推荐算法导论,还有几个”大神”推荐计算机程序设计艺术(现在我疑心他们是否翻过这些书),草草的翻了下这两本书发现实在看不懂,但幸运的是我在无意中发现了豆瓣这个神奇的网站,里面有很多质量不错的书评,于是我就把评价很高而且看上去不那么吓人的计算机书籍都买了下来——事实证明豆瓣要比这些”学长”或是”大神”靠谱的多得多。

1)数据结构与算法分析——C语言描述

数据结构与算法分析——C语言描述是我学习数据结构的第一本书:当时有很多地方看不懂,于是做记号反复看;

而且这本书的课后题大多都是经典的面试题目,以至于日后我看到编程之美的第一反应就是这货的题目不全是抄别人的么。

至今记得,这本书为了说明算法是多么重要,在开篇就拿最大子序列和作为例子,一路把复杂度从O(N3)杀到O(N2)再到O(NlgN)最后到O(N),当时内心真的是景仰之情=如滔滔江水连绵不绝,尼玛为何可以这么屌。

2)《算法设计与分析基础》

如果数据结构与算法分析——C语言描述是我的数据结构启蒙,那么韩军的课程和算法设计与分析基础就是我的算法启蒙,结合课程和书籍,我一一理解并掌握了复杂度分析、分治、减治、变治、动态规划和回溯这些简单但强大的算法工具。

3)《算法引论》

算法引论是我这时无意中读到的另一本算法书,和普通的算法书不同,这本书从创造性的角度出发——如果说算法导论讲的是有哪些算法,那么算法引论讲的就是如何创造算法。结合前面的算法设计与分析基础,这本书把我能解决的算法问题数量扩大了一个数量级。

4)《大话数据结构》

初学者如果非常想看书的话推荐《大话数据结构》,这本书比较浅显易懂,实在看不懂的东西也不必深究,简单过一遍有个大体概念就可以了,随着积累,之前不懂的东西自然而然就明白了。

至于名气极大的《算法导论》和官方课本《数据结构》,细节方面有些琐碎,小白看的话易头痛,易伤自尊,易被劝退,所以不建议小白看。

五,算法书籍推荐2:

原文链接:学习算法,看这篇就够了 - 知乎

1)入门级别

入门级别的书籍可以分为兴趣培养和基础介绍两个方向。

真正介绍算法的入门类书籍,《算法图解》(豆瓣评分 8.4)十分优秀。

相比于枯燥的教科书,这本书的表达要有趣得多,图解的形式也更加便于理解,对于新手来说十分友好。这本书的好处在于,它可以帮助你以一个轻松的方式快速对算法产生直观的认识和思考。其缺点则是缺乏足够的深度,系统性也没有特别好,但毋庸置疑,是很好的入门书。

另外《大话数据结构》(豆瓣评分 7.9)是国内作者写的入门书籍中相当优秀的一本书。它同样面对新人读者,以一种趣味化的方式讲解数据结构和相关算法的知识。

2)进阶进别

在这一阶段,应该对算法和数据结构拥有更系统化和深入的了解。包括存储机制,资源消耗,每种数据结构和算法的特点及使用场景。最好能多加思考,了解算法的来源,目的,以及发展趋势。

在书籍方面,《数据结构与算法分析:C 语言描述》(豆瓣评分 8.9),《数据结构与算法分析:C++ 描述》(豆瓣评分 8.5),《数据结构与算法分析:Java语言描述》(豆瓣评分 8.6)是三本经典书籍,内容较为系统化,讲解较为深入严谨,也被很多学校用作教材。

课程方面,麻省理工学院的算法导论公开课质量很高,干货充足。在网易公开课上有全部课程的中文翻译。你也可以选择北京大学的数据结构与算法公开课,在 Coursera,edX 上均有免费课程,中国大学MOOC 也有很多国内顶尖学校提供的公开课,可以免费学习。

另外这个旧金山大学提供的有趣网站可以帮助你非常好的了解算法和数据结构的运行原理。它可视化的描述了常用的算法和数据结构。

3)任何级别

可以说大部分程序员都在学习算法与数据结构的路上不断前进,高手与进阶的界限其实十分模糊。在任何阶段,一些公认的经典著作都具有深刻的价值。因此,无论是面对新手还是进阶级别的从业者,经典都值得推荐。

《算法》(豆瓣评分 9.4),公认的经典之一,也许是必备的工具书。

《算法导论》(豆瓣评分 9.3),另一本经典著作,被作为很多学校的教科书。

《计算机程序设计艺术》(豆瓣评分 9.4),这本书体量很大,内容经典,难度也相对较大,广受业界认可,值得一读。

你可能感兴趣的:(算法+数据结构+设计模式,算法)