讨论/算法和数据结构/小白来请教怎么学习算法/
小白来请教怎么学习算法

本人今年大二在读,java,c都会,数据结构会一些,高数基础不好,想深入学习算法,请教下各位大佬应该按什么顺序学习?

最好能有类似学习书单,谢谢各位大佬!!!

展开讨论
共 5 个讨论

已经有语言的基础,其实刷题并不难哦。现在「力扣」这个论坛已经做得越来越好了。你可以在讨论区或者是题解区看到高手写的代码和分析,这对于以前的刷题党来说是不可想象的。

刷题和高数其实没有多大关系,不会用到极限、积分、求导,也不会让你计算方阵的行列式,也不会用到各种统计学分布。需要的一点点简单的逻辑思维能力和空间想象能力(有些算法比较抽象,需要想一下代码的执行流程和数据结构里算法的运行流程)。

其实刷题做的事情大概就是怎样更好地解决问题,用到的思想是普遍且深刻的:例如:空间换时间、减而治之(排除法、缩小问题规模)、抽屉原理。深搜和广搜其实在生活中都有对应的例子,回溯法就是在做深搜,动态规划往简单了说就是空间换时间,然后从“头”开始计算,贪心算法严重依赖问题本身的特点。你大概还需要通过刷题去体会递归是怎么回事,还蛮有意思的哦。

在这里,我只是想说刷题之前需要的基础知识并不深奥,刷题更多的时候刷的是经验,看书和看视频更多时候只能帮助我们入门,有些细节的东西只有自己去刷才有体会。

如果一开始觉得入手比较困难的话,就从简单的问题开始,按标签刷题,由容易到中等,困难题看心情刷(有些困难题可能很有意思,也可能很基础,是可以刷的,有些困难题没有必要刷,合理分配时间和精力)。试着写写评论,写写题解,给别人点点赞,写写评论,还可以整理到自己的博客和 GitHub 里。

推荐的书本是《算法导论》和《算法 4》,但是这两本书都很厚重,需要像查字典一样去看,需要的部分精读细读即可。

个人建议,仅供参考。

11

同推荐算法4,你说java和c都会,那我不推荐你用c刷,推荐java。虽然说算法的实现不依赖于某种语言,但是你的思维会,如果不相信的话,你可以做上一两道树,图 或者字符串之类的题目,看看你是用java做着顺手还是用c做着顺手。你才大二的话,算导也是可以看的(但是不太推荐一上来就看),如果你是那种更习惯于从互联网上学习的人,那么你完全可以不看书,直接从力扣入手,这样做的好处是,你不会浪费很多时间去学了一堆根本用不到的算法(比如你要是看算导的话可能会看很久的红黑树(当然大神也可能看个半个小时然后动手刷刷刷实现了))。坏处就是,一开始挫败感可能会很强烈,尤其是你面对一道中等的题目,可能在评论区或者题解中这就是一道板子题,但是刚开始时入手时可能百思不得解。我记忆很深刻的是,我一个月前开始正式的刷,碰到了那道单词路径问题(hot100里应该有,你可以去看看)想了半个小时不知道该怎么做。点进题解一看,更绝望了,dfs+回溯+状态重置。我的妈呀,我一开始对于dfs的认识还是仅限于只有对于一个实实在在的图才可以(再次抱住菜哭的自己)。现在(依然很菜)但是再碰到这种题目,起码能一眼就看出来这类题目的套路了。我还记得我一开始在接触回溯法时,心想,这不就是dfs么,为啥叫回溯了,直到我独立的把n皇后那两道题目ac了,才明白这两者的区别。然后以后就能很自然写出了回溯了。有的时候,可能你在看书的时候,算法的伪代码描述我们都很清楚。但是你会发现,当你静下心来去把他独立实现时,你会碰到各种坑。
看书的好处是你会学的相对系统一些,了解一些最常用用的算法和数据结构。明白怎么去表达树结构,图结构。trie,搜索树,优先队列等等。不然到时候题解说开个优先队列,然后遍历就可以了,我们还在黑人问号。
总之,总结就是,不一定拘泥于只看书或者只刷力扣,可以两者结合。我在前20天基本上就是看一天书,刷一天力扣,在做力扣时尽量先思考这是一道什么题目。看书的话建议选一本带源码的,因为看代码能够很好地加深我们对书里所描述算法的理解。书的话,可以刷算法4,同时也推荐算法竞赛(日本的那两本,虽然用cpp写的,但是跟java没啥区别,都是用了语言的很小的子集)。但是一定要坚持刷,当你做过一段时间,你可以去打周赛,或者你不满足于力扣这种级别的题目了,觉得你特别适合学习算法的话,可以刷算导。或者去参加别的比赛。
最后,一个小提醒,做完题之后,不管你的结果是双100还是双0,一定要养成看题解的习惯。你会发现有些题解或者评论真的是宝藏。dfs时搜索某些路径作为答案时,用个辅助栈就是我在评论区学到的。
happy coding. :)
--刷题一个月的一丢丢心得(ps,真心羡慕你们这些大二就有刷题意识的同学,研二的柠檬精路过)

1

我和你差不多,我还想做点项目但是无从下手(苦笑)

可以按照下面这个顺序来刷:

  • 链表
  • 队列
  • 二叉树
  • 回溯
  • 动态规划
  • 分治算法
  • ...

刷到一定的量之后自然就学会了。当然,刷是要讲究技巧的。如果说你碰见一道题完全没有思路的话,建议看一下题解,或者找同学请教。那么下次再碰见同种类型的题目就会了。看书的话,学校的教材肯定够了,可以找师兄们或者去图书馆借阅;《算法导论》不太适合小白入门,当然每个人情况不一样,也有可能你适合看也说不定。

《漫画算法》、《数据结构、算法与应用-Java描述》、《算法导论》