笔者算法蒟蒻,本篇仅是对于核心竞赛算法的整理以及本人在学习过程中寻找到的优秀资源的介绍
学算法并不单单是为了打竞赛、拿奖,更多的是为了应对大厂面试、养成算法思维、优化代码效率、快速实现功能等内容
各类算法之间较为独立,学习的时候可以按照板块逐个击破,而本文的核心目的便是总览各个模块,将存在关联的算法进行整理归类,分出主次
算法并不是一个边缘路线,恰恰相反,就业岗位一般分为“算法岗”和“开发岗”,面试一般必考算法。学习算法也不是占用时间干课外的事,算法是计算机专业的必修课
推荐:
网课-博客-例题-博客总结-训练
如果有教科书:
书-课件-网课-博客-例题-博客总结-训练
流程并不复杂,对应资源稍后给出,不要被下面的庞大体系所吓倒。毕竟可怕的并不是知识内容复杂,而是根本不知道要学什么。所以下述路线建议仅在学习前供了解所学内容所用
此部分较为零散,但每个学起来都不算困难。核心目的是要熟悉解题流程、建立算法思维、掌握部分简单套路。除特别标注外所有算法均需熟练掌握并快速编码。建议遇到想象的功能无法实现时搜索或者提问。
首先,需要学会分析时空复杂度(不必深入研究,能够根据循环等情况判断时间复杂度即可)
之后就可以开始进军算法
模拟、暴力
排序
递推递归
贪心
二分
位运算(非重点,掌握基本操作符,在遇到大神用二进制优化时着重记一下他的技巧即可)
这部分是算法的基石,各模块间存在一定交叉。知识点看起来多且杂,实际上只要按照顺序学心里就有底,知道什么时候会结束。
着重掌握各个数据结构的数组实现,因为stl慢且不灵活
dfs、bfs
这部分主要考验思维,抓住”解决一个问题时其所需要的子问题已全部解决“这个核心
背包问题
01、完全、二维、分组、多重、单调队列优化多重背包
区间dp
树形dp
换根树dp
数位dp
状态压缩dp
概率dp
图的概念及遍历
最短路系列
floyd、bellman-ford、spfa、dijkstra
最小生成树
prim、kruskal
在同一个分点的知识建议连续学
各大oj平台
oj平台的作用是在线判题和模拟比赛,各大oj的使用方式大同小异。核心内容是oj的判题规则
请阅读:
常见OJ(Online Judge)系统判题解释 - 知乎 (zhihu.com)
一般简称为cf
该平台的特点是定期举行含金量很高的比赛来“上分”,每场比赛都会根据你的表现计分,以此来判断你目前的水平,然后就可以根据自己的分数来刷相应分段的题目
cf上还有大量的比赛真题,支持模拟比赛
关于codeforce的使用
Codeforces游玩攻略 - ezoixx130 的博客 - 洛谷博客 (luogu.com.cn)
新手友好型平台洛谷
首页 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
洛谷的特点是好看的页面和强大的题单功能,我们的每日一题、模拟赛等内容也会在洛谷team上进行
百科全书级别平台vj
vj以强大的题库著称,你能在里边找到几乎你所能够遇到的所有题目
面试必备leetcode
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com)
力扣是元老级别的算法平台,以应对面试算法为主。特点是题库庞大、题解清晰、判题返回结果详细
那这些oj该侧重于谁呢?有以下这些建议
以上是笔者的个人习惯
算法书
数据结构:
数据结构教程-李春葆,非常的详实
基本算法以及c++的stl:
洛谷的深入浅出程序设计竞赛,官网有卖。特点是简单,并且例题和洛谷配套,可以随学随练
高级算法:
挑战程序设计竞赛第二版:数据结构内容会多一些
挑战程序设计竞赛2:竞赛界神书
配套课程
代码源(付费)
基本上笔者所学的所有内容均来自这里,有上述学习路线配套的所有课程
蓝桥云课(付费)
特点是简单明了,直击真题
b站
我是小蜗蜗
也是一位代码源的老师,有竞赛录播、知识讲解
大雪菜
有每日一题,可以跟着训练
马士兵教育一左程云
主要讲面试算法
mooc
浙江大学数据结构
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。