怎么学算法
㈠ 算法该怎么学感觉好难
很多人都会说"学一样东西难",一开始我也觉得很大程度是因为每个人的智力水平等等不可改变的因素. 但是后来我发现,有一个东西也很能决定一个人是否会觉得一样东西难学,那就是理解方式.
一件事物通过不同的途径让一个人理解效果差异是很大的.就比如说数学里面教你一个圆,有的人看到一个圆就能很快明白什么是圆,有的人却非得看到x^2+y^2 = r^2这种式子才有感觉,甚至有的人需要"到定点距离为定长的点集"这种描述才能理解. 那这个不一定是说谁的智力水平更高,而是因为他们对不同形式事物的敏感程度不同.
回到算法上来.算法本质是一种数学.他是抽象的操作集合.(看这么说你可能会觉得不知所云,但是如果我说他只是一种解决问题的办法可能就好理解). 所以很多书,论文,或者很多老师教的都是一种数学描述的算法,这样子的算法就我个人而言相当难理解,看了就想到代数高数什么的.. 但是如果找一个图文并茂的解释,或者找个人一步一步把一个算法给你我比划一下,我立刻就能理解. 说白了,就是你一定要找很多很多不同的角度来尝试接受一种东西,你一定可以找到一种你相当敏感的角度,用这个角度学习你就会游刃有余. 智力因素并没有太大影响的.
具体点说,你可以试试这几种不同的角度.
直接看数学形式的算法.我个人最无法接受的形式,但是有人很喜欢..例子就是算法导论上面那种描述.
听一般语言描述,最理想是找一个明白的人,给你用通俗语言讲讲原理.这个不错,很多我是这么理解的
图形理解,叫理解的人给你画插图,分布图,结构图等等,来分解一个算法,找到他的思路.说到图,有一个人的博客这方面做得很好:matrix67.
程序理解.找到一种算法的实现程序,对着程序理解,可以尝试分布运行,观察一下变量的变化,这样来理解算法.
实在太难的算法,可以边写边改来理解.当时我学习插头dp的时候就是这样,不论怎么总是一知半解,最后硬着头皮写了一遍,改了很久,但是改过了的时候,也就真的明白了是怎么回事了.
也许还有别的什么办法,因为人对事物的接受角度实在是太多了.多想想你平时学习什么比较容易,找出你最敏感的理解方式就行了.
有感而发说的一些东西,不一定都是正确的,只供参考,欢迎指正.
㈡ 如何学习数据结构与算法
1、记住数据结构,记住算法思想(是什么)记住数据结构最直观的东西;记忆该数据结构的定义、性质、特点等。很多东西的理解和创新都是以记忆为前提的。
2、进行大量相关编程练习,用编程语言去实现某一数据结构上的算法(怎么办)
很多时候,理解一个算法很容易,很容易在纸上去模拟一个算法的实现过程。但具体实现,则是另一回事。一定得先自己思考,然后再去看书中给的编程语言实现。
3、“记住”特定情景下,利用某一特定的数据结构,去解决问题 (为什么+怎么办)
每介绍一种数据结构,浙大数据结构与算法的MOOC课程都会有一个实际问题来作为“引子”,回答了“这种数据结构为什么会出现”。有的是为了实现特定的操作,有的是为了时间和空间上(大部分考虑的是时间复杂性)效率的更高(所以,没事的时候,分析一下算法的时间复杂性)。这些东西,我们也须理解记忆。每一数据结构都有其特性,去解决某一类问题,我们需要去记忆,去感悟。
4、形成一个属于自己的知识体系
如何去“记住”(记好笔记,多多复习);在学习过程中,遇到挫折,产生挫败感该如何处理(这个是必然会发生的,总有难以理解不会的地方);如何进行心态方面的调整(欲速则不达,不过也有”敏捷学习“的概念)。
㈢ 想学习算法,如何入门
入门的话推荐两本书:《算法图解》和《大话数据结构》,
另外推荐一门视频课程《300分钟搞定数据结构与算法》,不想花时间看书的同学,建议看这个视频课程,是关于数据结构和算法很好的一个课程。
㈣ 做为一个初学者,如何才能学好算法呢,感觉自己很菜
凡事都讲究动机,你学习算法的目的是什么呢?目的不同,学法不同侧重不同。
如果你是准备跳槽,以面试为目的,可以先从cracking the coding interview入手,题目是按照链表,树图,递归这种章节安排的,每章都有题目,难度适中,第一遍自己写不出来很正常,画图分析,然后再做第二遍,第二遍就快很多,理解也深刻了,实在理解不了的算法,没办法,背吧,说不定到后面不知什么时候就理解了,所谓读书百遍,其意自现,算法也一样。
如果你是半路出家的程序员,看书觉得看不下去,可以试着看看视频,现在网络这么发达,网上有很多免费的精品视频,比如潭州教育老师的数据结构以及清华邓俊辉老师的数据结构都是特别好的课程。
最后一种就是你对算法理论和精髓确实感兴趣,且有一定的数学功底,你可以尝试研究下《算法导论》,甚至《计算机程序设计艺术》(反正我是看不下去)。
其实,无论出于哪种目学习算法,其实最重要的一点就是:多编程实践,多思考,这是废话,但这也是真理。
㈤ 初学者如何学算法
先看看两本书,一本数据结构,一本离散数学。。。看完以后你就会。。。。
㈥ 学习算法的路,该怎么走
先学数据结构,然后看算法入门书,推荐《趣学算法》,有大量图解,比较简单,容易懂,而且有源码下载直接运行。传统的算法书,大多注重内容的收录,但却忽视思维过程的展示,因此我们学习了经典的算法,却费解于算法设计的过程。遇到一个实际问题,通过问题分析,选择使用什么样的算法策略,基于这种算法策略选择什么样的数据结构,有时算法策略和数据结构的选择并不是唯一的,不同的算法策略和数据结构设计的算法,其复型行杂性是不同的。而很多书就是灌输式的讲一个实例,一下子就选择了一个认定是最优的算法策略,告诉你就这样干,不谈数据结构,然后分析算法复杂性,就结束了。
原则上讲算法策略就讲算法策略,不依赖任何程序设计语言和数橡租薯据结构,但对很多学生来讲,尤其是语言没学好,数据结构也不熟练的同学,只讲算法策略,如同空中楼阁。自己用算法解决实际问题,一头雾水。刚入门者不建议直接看《算法导论》,虽然它是经典,不适合初学者,会看蒙圈。算法入门推荐《趣学算法》,这本书有大量图解,适合初学者,从问题出发,根据实际问题进行分析,选择合适的算法策略,并分析为什么采用这种算法策略,然后选择什么数据结构,梁者不同的数据结构复杂性会有什么区别,巧妙地将数据结构和算法策略拧成了一条线。通过大量实例,充分展现算法设计的思维过程,让学生充分体会遇到一个问题,如何分析,使用什么算法策略,采用什么数据结构,算法的复杂性如何,是否有优化的可能。

㈦ 想做一名算法工程师需要学什么
1、业务认知&问题定位
首先要清楚你所要解决的问题是什么,是否需要复杂的算法求解。问题的定义来源于你对业务的认知和理解。我们经常陷入一种误区,觉得自己是一名算法工程师,遇到任务问题都想要用复杂的算法去求解。正所谓一顿操作猛如虎,得来的效果却很一般。因此,做事之前一定要在理解业务的基础上,把问题定位清楚,用合适的方法求解。
2、数据挖掘&分析
深度学习的应用能够突飞猛进的一个重要原因就是大数据的支撑。当前获取数据的成本很低,而数据清理和挖掘的成本很高,但非常重要。数据是模型的输入,是模型能够拟合的上限。在入模之前,你需要花一定的精力用于数据工作,这是必要也是值得的。因此,掌握数据能力也是一名算法工程师的必经之路。
3、算法策略
这是每位算法工程师的硬实力,有了清晰的问题和可用的数据后,我们需要选择合适的算法策略求解问题。就销量预估而言,由于特征大部分都是表格型,树模型及其变体成为首选的方案。通过树模型,你能够快速拿到一个不错的baseline。但千万不要停滞不前,你需要调研更多的先进的方案进行优化,即使此时能够拿到的受益不多,但请坚持专研的精神(近期时序模型中,热度很高的informer值得尝试)。此外,“人工智能,有多少人工就有多少智能”这句话在实际应用领域体现得淋漓尽致。策略也属于算法的一部分,人工策略有时候能够带来很大的受益,也能够找到更适合的算法优化方向。例如,我们在优化首猜的货品池时,考虑到首猜目前的推荐算法已经非常优秀了,但消费者的成交来源主要是搜索,我们通过人工分析选择了做增量货品供给的方式,拿到了不错的业务效果。基于此,我们也找到了更合适的选品算法优化方向。
4、离线实验和线上AB实验
实验是验证理论的最佳手段,也是最具有说服力的。我们需要找到几个合适的指标进行优化,并且要保证离线效。
㈧ 怎么学习数据结构算法效果比较好,需要每个程序都编写吗
1. 程序 = 数据结构 + 算法
2. 学习:刚开始看时肯定会有些不清楚,因为你是刚学完 C 语言,对 C 语言还不太熟练。你学习数据结构时找一本经典的数据结构书,看完一个数据结构后用 C 语言将其实现。开始时的实现肯定会有困难,那么请 google 下会有很多优秀的数据结构源码的。你可以模仿这些优秀的源码写。请记住一定要开始时自己实现,当被卡住了就看一下源码,看看自己被卡在了什么地方,引起注意以便下次自己会写。当你把书上的数据结构源码写了一遍之后,你已经超过了你绝大部分的同学。
3. 运用: 这时你就需要对这些数据结构加以运用,你可以在 google 上搜索“某个数据结构 + ACM”,你就会看到一些题目,这些题目都是数据结构的运用,甚至有这些数据结构的变形。每种数据结构做5题左右。期间你还会遇到程序另一重要的方面算法,有不会的就 google。 期间可以学到的数据结构和算法做小软件玩儿,例如压缩软件,五子棋之类的。
4. 深入: 当你完成了第三步你已经是你们学校的小高手了。这时看你的方向如果这时发现自己喜欢 ACM 的话就去搞 ACM,如果不感兴趣,就找自己感兴趣的技术学习一下,做几个完整的项目,例如写个编译器,或者实现一个简单的编程语言。
总结:无论选择哪条道路只要按照这些做了,你以后肯定会成为抢手货。
