找回密码
 立即注册
查看: 309|回复: 4

如何学习算法 从小白到ACM金牌大神

[复制链接]
发表于 2022-6-19 12:26 | 显示全部楼层 |阅读模式
大家好,我是编程熊。
不知不觉学习算法已经将近四年,从0基础小白,到ACM亚洲区域赛金牌,拿到字节、旷视等大厂offer, 其中经历的困难或许只有自己知道,今天分享一下我在学习算法这四年,总结的一点心得,希望帮助大家少走一些弯路。
关注 @编程熊 ,持续获取最新干货文章。
如何学习算法从小白到ACM金牌大神

本文主要从下面几个方面展开,干货满满,大家细细品尝。


初步了解知识轮廓

首先我们要在大脑中初步建立算法与数据结构知识的结构,有助于我们后面学习到某一块知识,可以知道我们当前的学习的知识属于哪个模块,进而在脑中对知识点进行分类和总结,对后续的刷题和学习都十分帮助。
我花了一天时间将算法与数据结构知识点总结成下面的图,大家可以看一下。


学一门基础的程序设计语言

刷题肯定要学会一门程序设计语言呀,不然怎么写代码呀。
已经掌握一门程序设计语言的同学可以跳过此步,直接看下面的内容。
这里推荐学习 C++/Java/Go/Python。
这几个是目前比较主流的语言,如果你已经会其中的一种,学习算法与数据结构就够了。
会的意思是指: 会题目要求的基础的输出和输出,了解语言基础的语法,可以根据题目要求,能用语言实现自己的思路。
注意一点,如果目标是在学习算法和数据结构,不要对语言的细节进行过分的深入,耽误过多时间。只要会基本的语法可以实现算法的思路就可以了。


选一本适合自己的参考书

初学者不要上来直接撸《算法导论》!
初学者不要上来直接撸《算法导论》!
初学者不要上来直接撸《算法导论》!
和大家一样,我有时也会雄心勃勃,决定要好好学习算法,打开《算法导论》,从第一页开始看,我要全部把算法与数据结构都学会!谁都拦不住!
结果,看一会儿便没了耐心,《算法导论》上面的讲解详细但是数学较多、有些枯燥,不适合初学者一上来就学习。
初学者从简入手,选择一本薄、相对容易、看得进去的书,建立学习算法的信心
这里推荐几本得到很多好评的两本书。
《算法红宝书第四版》
对每一个算法知识点讲得都很详细,同时不是很繁琐,比较容易上手。


《图解算法》
图例很多,语言通俗易懂,学起来比较有意思。
《算法导论》
大家小学的时候肯定都有字典或工具书。
我们就可以把《算法导论》当做工具书来使用,在学完了基本的算法与数据结构,大家想对某一个知识深入学习或者复习的时候,这个时候可以查一查《算法导论》。



我把这 三本书电子书和计算机学习核心资源(包含 算法、操作系统、计算机网络、数据库、面经...) 都整理好了,免费分享给大家。
刷题实践

纸上得来终觉浅,绝知此事要躬行!
对于算法和数据结构,最好的检验学习成果的方式,就是刷题!
所以推荐大家学习一个知识点后,去刷一点对应知识点的题目巩固和加深一下理解。
这个时候你是不是想问,我应该刷什么题呢?
编程熊已经帮你想到啦!ACM金牌选手整理的【LeetCode刷题顺序】推荐给大家。
LeetCode组队刷题群

一个人很难,但一群人很容易。
编程熊深知 一个人刷题的坚辛和不易。比如:

  • 不知道如何学习算法与数据结构
  • 不知道刷什么题
  • 不懂的地方找不到人请教
  • 代码遇到问题没有人交流
因此很难坚持,不是懒,是缺少一个刷题的环境。
所以我创建了一个LeetCode组队刷题群,里面有很多人在里面每天打卡,分享刷题心得,群里还有 多位ACM亚洲区域赛金银牌选手,欢迎大家一起学习!
LeetCode组队刷题:    LeetCode组队刷题


如何正确做一道题

从简入手
有的时候一下想到时间复杂度最低的解法是很难的,就像一口吃不成胖子。
所以我们可以先从简单暴力(时间复杂度高)的方法入手,可以发现一些题目的线索,为后面想到时间复杂度最低的方法打下基础。
优化
思考如何在第一步的基础上,如何优化算法,这里可以学习常见优化的算法与数据结构来降低时间复杂度。
比如: 哈希表、二分算法、动态规划等。
构思代码
有了以上两步,我们此时应该已经有了一个正确的想法,此时我们应该构思代码,有那几部分,每部分实现什么功能,代码怎么写。
而不是直接闷头去写代码,因为很多时候没想清楚,直接去写代码,会导致写了一半发现思路不对,之前写的代码前功尽弃。
写代码
实现第三步代码,写代码的时候要专注,写完要自己先检查一遍有没有手误,防止自己想的和写的不一致,最后写一个简单的样例,测试一下代码是否可以通过。
测试通过了就可以提交啦。
Debug
如果代码通过了,可以直接看下一步。
如果我们的题目没有通过,应该检查代码是不是有bug、思路对不对。
有的时候肉眼看不出的时候,可以出几组复杂的测试样例,看看自己的代码是否可以输出正确的结果,若不能的话,可以根据样例看代码哪里有问题。
总结与反思
题目通过了,我们应该总结一下这道题考察的知识点、切入的角度、同类型的题目等,还要思考有没有更优的办法,代码还能不能更加简洁一些。
做到以上几点,一道题的就学习的很透彻了,遇到同类型的题目也可以举一反三。
如果对你有所帮助,欢迎点赞支持~
关注 @编程熊 ,持续获取最新干货文章。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-6-19 12:31 | 显示全部楼层
那就慢慢来了!
发表于 2022-6-19 12:35 | 显示全部楼层
行了吧
发表于 2022-6-19 12:38 | 显示全部楼层
陈越姥姥说的你还没改正呢
发表于 2022-6-19 12:39 | 显示全部楼层
这边忘记同步了,谢谢提醒。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 00:51 , Processed in 0.093042 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表