【你问我答】初学者应该如何学习算法?

问题描述:

初学者应该如何学习算法?算法的学习路径是怎样的?

回答有奖:

将于问题截止后,选取一位认真回答问题的牛友,赠送200牛币!

本期回答时间:截止于2019年1月9日
你问我答问题汇总:点击进入

p.s.若至问题截止时间为止,没有理想答案,则问题延期(奖励也同时延期)。

#我也有问题想询问牛友,怎么办?

欢迎私信@筱茜 说明你的问题,将根据问题具体情况排期进入【你问我答】专场~
私信请注明参与【你问我答】专场哦~

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏#
全部评论
刷题~抽我~
点赞 回复
分享
发布于 2019-01-03 05:36
初学者如何学习算法? 0、工欲善其事,必先利其技 要想学习好算法,应该对某种编程语言的语法结构有足够深的了解,熟练掌握基本的编程知识。然后在学习算法理论的时候不断Coding,去实践相应算法。 这里重点强调的是基本的知识,包括语法、常用标准函数库等,但不是某些个语言特有的特性,不是一些“骚操作”。算法是通用的,如果说一种算法只能够在支持某种特定功能的编程语言下实现,那么这种算法便失去了广泛流传意义,只需要死记硬背一下,以应对下一次它的出现;算法亦是私有的,面对特定场景,针对特定的业务需求,有时候有一些令人意外的算***让效率得到极大的提高。 举例来说,我们最开始学编程的时候是从HelloWorld写起的。要学会写HelloWorld,我们要知道函数的基本组成结构、标准输出函数是什么、要用到哪些头文件……后面学的越来越复杂了,我们需要知道条件转移、几种循环结构、字符串、数组、二位数组、树、图,队列、栈,等等。我们要知道并且熟悉它们的基本概念和一些常用的操作方法,这些是编程语言通用的,每个编程语言的写法可能会有所不同,比如C里面一个常见的标准输出是printf("Hello, World!"),Java里面的是System.out.println("Hello, World!"),看起来差异很大,其实学完C语言后很好理解Java语言的这种写法。 1、扎实的理论是学好算法的基础 当编程语言基础学习完之后,这时候应该对整个语言有了一个基本的认识和了解,足以应对算法学习中出现的大部分编程知识。 强烈建议你学哪门语言,就用以这门语言来讲解算法的算法书。比如我要学习Java,那我就可以用《算法 第四版》这本书。推荐这么做是因为这可以减少很多不必要的麻烦,请记住我们的目的是为了学习算法,就应当避免在其实不必要的事情上分散精力。 怎么选择书籍这是一个仁者见仁、智者见智的问题。每个人的情况不同,适合每个人的书也不同,最重要的是选择一本书,坚持读下去、读完,坚持本来就是一种成功。(真的不是因为我懒!!)这里不太推荐《算法导论》这本讲解算法的经典知识,因为它太厚了,很容易劝退多数人。想要看懂它需要一定的编程经验和算法基础,建议将它作为后续深入学习算法的工具书。 建议在学习算法理论的时候,把电脑放一边,或者在书桌上留足够大的一片空间,可以放一本or基本书,外加一本草稿。学的时候可以多在草稿本上写写画画,比如学循环队列,你就可以在纸上画一个圆环出来,对着这个圆环理解循环队列的概念和操作,这样方便理解和记忆判断循环队列队空、队满的条件。还可以在纸上写写算法,练练手感。 2、实践是检验真理的唯一标准 学习完算法概念,这时候应该对算法有一个初步的印象,冒泡、快排、先序遍历、后序遍历、层次遍历,应该都熟稔于心。比如知道冒泡是每趟从关键字中找出最大或最小的那个值来,快排是从中挑出一个值,然后小的放左边,大的放右边(或者相反)。但知道算法概念并不代表着能用代码实现,可能很多人会在学完编程基础和算法基础以后,发现好像无从下手,只会写个简单的冒泡、快排,再就写不出了。是不会吗?不应该,如果仔细学了一遍没道理不会;是忘记了吗?刚学完可能会忘一些,但没理由忘的一干二净。关键是缺少训练,练的多了,自然就成老司机了。在学完理论后最开始的那一段时间,可能会很痛苦,感觉很多题看不懂,不明白用什么来做,或者看得懂的,但就是写不出,耗费很多时间,手生得很。选择简单的算法题来几道,慢慢熬就过去了。 推荐几个刷题平台: 牛客网 LeetCode POJ 小米OJ Online
点赞 回复
分享
发布于 2019-01-03 09:04
秋招专场
校招火热招聘中
官网直投

相关推荐

点赞 9 评论
分享
牛客网
牛客企业服务