学习算法的路,该怎么走?

如题所述

第1个回答  2018-01-08
‍‍

先学数据结构,然后看算法入门书,推荐《趣学算法》,有大量图解,比较简单,容易懂,而且有源码下载直接运行。传统的算法书,大多注重内容的收录,但却忽视思维过程的展示,因此我们学习了经典的算法,却费解于算法设计的过程。遇到一个实际问题,通过问题分析,选择使用什么样的算法策略,基于这种算法策略选择什么样的数据结构,有时算法策略和数据结构的选择并不是唯一的,不同的算法策略和数据结构设计的算法,其复杂性是不同的。而很多书就是灌输式的讲一个实例,一下子就选择了一个认定是最优的算法策略,告诉你就这样干,不谈数据结构,然后分析算法复杂性,就结束了。

原则上讲算法策略就讲算法策略,不依赖任何程序设计语言和数据结构,但对很多学生来讲,尤其是语言没学好,数据结构也不熟练的同学,只讲算法策略,如同空中楼阁。自己用算法解决实际问题,一头雾水。刚入门者不建议直接看《算法导论》,虽然它是经典,不适合初学者,会看蒙圈。算法入门推荐《趣学算法》,这本书有大量图解,适合初学者,从问题出发,根据实际问题进行分析,选择合适的算法策略,并分析为什么采用这种算法策略,然后选择什么数据结构,不同的数据结构复杂性会有什么区别,巧妙地将数据结构和算法策略拧成了一条线。通过大量实例,充分展现算法设计的思维过程,让学生充分体会遇到一个问题,如何分析,使用什么算法策略,采用什么数据结构,算法的复杂性如何,是否有优化的可能。

‍‍
第2个回答  2018-01-08
‍‍

从接触算法到现在,大概七年:初学时推崇算法牛逼论,实习后鼓吹算法无用论,读研后再被现实打回算法牛逼论。怎么这么像辩证法里的肯定到否定再到否定之否定。现在来看,相当数量的鼓吹算法牛逼论的人其实不懂算法的重要性——如果你连用算法解决实际问题的经历都没有,那你如何可以证明算法很有用,而绝大多数鼓吹算法无用论的人不过是低水平码农的无病呻吟——他们从未碰到过需要用算法解决的难题,自然不知道算法有多重要。总而言之,如果你想成为一个码农或是熟练工(CodeMonkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。

‍‍
第3个回答  2018-01-08
‍‍

学习路线应该是这样,从浅入深:前提:了解一门语言。先了解基本的数据结构,栈、队列、树、图、简单排序等;一般高校教材基本满足。如果还在上学,抓紧机会学习好概率论、数理统计、微积分、线性代数,最优化,为以后进阶打好基础;(概率和微积分尤为重要)。如果只想了解常见算法,这步可略。如果想在算法上走的更远,数学基本功一定需要下功夫;来吧,不用说,上《算法导论》,第一阶段看懂算法,尽量实现一遍;第二阶段看懂证明;实习、项目、编程、练习一定要伴随左右,无练习无提高;继续进阶,深入了解一个领域,或图像信号模式识别、或统计学习人工智能、或编译原理底层优化等等;例如你选择人工智能之路,那么看《统计学习》、《数据挖掘》、《神经网络》;找个好项目锻炼自己的能力,在实践中加深理解。看论文,改进已有算法,或提出更佳算法;再往上就不知道了,总之,保持激情、保持好奇心,一路向前,终将有所收获。

‍‍
大家正在搜