如何有效学习算法
学习算法的基本思路就是:先学习算法思想,然后通过做题消化思想,并在做题过程中慢慢学习,掌握一些小技巧。这其中算法思想就是道,而经典题目以及做题技巧就是术。做题是通过术来完善道。
但是很多人都反应看讲义和做题之间断层严重,也就是一看就会,一些就废。这怎么办呢?
除了多写,多练习之外,我认为以下两点可以帮助你:
- 做题的时候和讲义(学习资料)进行结合
这是一个很重要的也容易被忽略的点。拿《91 天学算法》来说:看讲义就是学思想,每日一题就是巩固消化思想。做每日一题的时候,要多往讲义上靠靠,比如想一下这道题对应讲义哪一部分,考察的是讲义中提到的哪一个知识点。
- 看讲义(学习资料)的时候将例题用可视化的方式自己跑一遍
我刚开始学习算法的时候,基本上也是这种思路。学习完思想做题的时候对例题都在电脑或者纸上画一下代码执行流程,然后和学习的算法思想进行结合。这样不仅算法思想容易吸收,而且也收效缓解了一看就会,一写就废的尴尬境地。
但是毕竟自己画图还是有点成本的,不是所有的人都有动力自己画图的。程序员都很懒,其实我刚开始刷题的时候一直有一个想法, 如果做题有可视化显示该有多好?最好是和我讲义图类似的那种, 这样无疑对新手来说吸收思想效率肯定高。
可视化调试插件
无巧不成书,前几天《91 天学算法》群里有人提到 LeetCode 刷题调试。大家有的用 IDE 调试,有的用会员的调试功能在网页调试。 其实前一阵子我分享刷题技巧的时候也分享了调试插件,没有看过的同学可以看下 力扣刷题的正确姿势是什么?。
今天再分享一个适合新手的调试工具,简单易用,直观方便。更关键的是,其已经内置到我的刷题插件 leetcode-cheatsheet 中,直接开箱即用,插件版本大于等于 0.9.0 即可。虽然它暂时还无法自动生成像我讲义里面那么完整的图和动画,但是比文字要直观太多了。后期考虑集成更多的语言以及更多的语法特性以及更好的展示效果。
该使用方式非常简单,完全满足了大家偷懒的需求。你只需要:
- 安装刷题插件 leetcode-cheatsheet
插件如何下载与安装可以在公众号回复插件获取
- 打开 leetcode 中任意一道题目,写代码。
目前支持 Python3,CPP,JavaScript
- 点击下方的可视化调试
- 按提示修改代码后点击Visualize Execution按钮
如果无法修改代码,可以先点击 edit code
这里我就想吐槽一下 leetcode 了。干嘛每一道题函数名字都不一样,真没这个必要。比如都叫 solve 不好么?希望力扣可以考虑一下这个建议。
- 通过控制区域控制代码执行,右侧会自动同步的可视化地显示变量信息
最后友情提示一下。可视化调试推荐在看资料(比如 91 天学算法的讲义)的时候把其中的例题用可视化的方式调试一遍,填平思路到代码的鸿沟。 之后大家做题不要依赖调试功能,而是先在大脑中调试一下,然后用工具验证。也就是说这个工具,我仅推荐你在两种情况下使用:
- 看算法思想资料,做其中的例子的时候一步步调试学习。
- 代码有 case 跑不通,先在脑子中过一下,猜测大概出问题的点,然后用工具直接定位到附近通过可视化的方式帮助你分析。
最后大家有什么想要的 feature 可以给我公众号后台或交流群里留言。