今年年后立了一个Flag,是希望整理一条路线,让算法学习过程更加有梯度,让算法入门不再那么艰难,在写完那篇文章之后,我便开始着手规划如何去做这样的一件事情,想来想去,感觉靠谱一点的做法是做一个开源项目,这个项目能够整合目前所有OJ的题目资源,然后分门别类的整理一条从易到难的路线。
算法·进阶石
开源项目名称叫做算法·进阶石(algorithm-stone),寓意学习算法是一个长远的事情,每一步都是一小块石阶,通过这些小石块最终能走的很远。
开源地址:https://github.com/acm-clan/algorithm-stone
可以点击文章左下方的“阅读原文”跳转到项目地址。
路线图
路线图是svg图片,如下图所示:
首先是按平台,然后按模块进行分类,每个模块又有很多小的分类,上图中是动态规划的分类,再来看一个树的分类:
图片中打√的图标表示这个题目已经有写代码,还有一个题解的图标,如下图:
这种有小瓶子的图标表示这个题写了题解,点击svg图片上的题目可以跳转到题目页面,点击小瓶子可以跳转到题解页面。
为什么要弄这个路线图
降低学习曲线梯度
路线图最大的作用是降低学习曲线梯度,我们学习数学、物理等学科时会做很多例题和练习题,这些题目是经过很多年很多老师精心整理编排的,所以我们才不会在学习过程中有太强的挫败感,但是算法不一样,算法思路千差万别,题目之间难易跨度经常会很大,导致做了A题不会B题,做了B题不会C题,对于初学者来说要想走过最开始的那段路很困难。本项目就是整理题目,将题目按简单到难的顺序进行编排,尽可能的让每一步都变小,不用担心跨度太大。
整合现有资源
我们学习算法会接触各种各样的书籍,以及很多网络文章,但是不管是书籍还是网络文章,都不可能整合所有的题目,开源项目不同,开源项目可以一直维护并且整合所有资源,并且采用程序自动生成路线图,不是书籍和文章能够做到的。
本项目第一步是整理Leetcode算法,当然,我的计划里肯定不止是Leetcode算法,因为我的公众号名称是《ACM算法日常》,终极目标还是的ACM竞赛算法,Leetcode算是起始模块。
Leetcode的题目质量比较高,可以说是国内参与人数最多的算法竞赛,也能得到所有大公司的认可,很多公司都在Leetcode上面合作举行招聘周赛。所以这里优先使用这个平台无可厚非,这样可以优先照顾需求最多的需要学习算法的童鞋。
算法学习是量变到质变的过程
李连杰的电影《霍元甲》中有段话令人印象深刻:
代码语言:javascript复制想练武,就得下功夫,
什么是功夫
功夫...功夫是要时间磨练出来的,
你讲挡挡挡,
两三年的猫脚功夫,
这一拳二十年的功夫!
你们挡得住吗?!
练功夫如此,算法亦然,学习算法是一个由量变到质变的过程,不是你写几个题练几个月就能明显提高的事情,天资卓越的人可能只需要几年,但是大部分可能是学了很久还是个新手。本项目就是为了将这样一个超长时间的学习过程可以统一的放到一起,既可以辅助学习,也可以作为个人记录。
目标用户
这个路线图一开始主要针对算法初学者以及准备跳槽找工作的人,让初学者有一个清晰地学习路线规划。如果你是一名专业的acmer,你也可以使用这个项目,但是由于初期只会整理Leetcode的题目,你可能得不到太多有用的cf路线规划,除非有人有时间去做这个事情,只是我接触的acmer都比较忙,整理工作量巨大,所以暂时不期望有人去做这个事情。这个开源项目提供了一个基本的机制,能够将题目路线绘制成svg图片,acmer可以用这个整理自己的学习路线。
如果你是算法初学者,这个路线图未来将是你所能见到的最全的刷题地图,网络上有大量的算法题解和算法题合集,但是不可能有文章能将1700多道题整合起来,但是我们的地图却可以包含几千道题甚至几万道题,只要时间一直流转,这个开源项目就能整合无数的算法题。
如果你是算法爱好者或者准备跳槽找工作,你也可以使用这个开源项目进行刷题,不管你算法水平怎样,都可以找到你自己的路线。
开源规划
现在项目还处于起步阶段,只是将Flag变成了可执行的方案,接下来要做的是整理所有的leetcode题目,这个过程可能需要半年到一年时间,大部分题目都是我来整理,首先是整理路线,然后是做题和整理题解,整理路线只需要知道题意、分类和解题难度,做题和写题解需要更多时间。
如果leetcode的题目整理完了,接下来会将重心放到cf这样的高质量刷题平台,cf是英文的,所以速度会更慢一些。但是只要有时间,就会一直完善下去。
如何使用
你可以在项目主页上找到需要的帮助信息,如果你还想自己运行路线图绘制程序,还可以看看开发文档,新手需要掌握的git和vscode技能我也写了2篇帮助文章:
如何将宇宙最强vscode打造为刷题神器
用颜值超高的github desktop参与开源项目