6 Star 3 Fork 0

湖北大学瑞翼工坊 / 培养计划

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
algorithm.md 7.64 KB
一键复制 编辑 原始数据 按行查看 历史
猫猫 提交于 2022-04-02 04:45 . update docs/algorithm.md.

算法学习路线

前言

笔者算法蒟蒻,本篇仅是对于核心竞赛算法的整理以及本人在学习过程中寻找到的优秀资源的介绍

学算法并不单单是为了打竞赛、拿奖,更多的是为了应对大厂面试、养成算法思维、优化代码效率、快速实现功能等内容

各类算法之间较为独立,学习的时候可以按照板块逐个击破,而本文的核心目的便是总览各个模块,将存在关联的算法进行整理归类,分出主次

算法并不是一个边缘路线,恰恰相反,就业岗位一般分为“算法岗”和“开发岗”,面试一般必考算法。学习算法也不是占用时间干课外的事,算法是计算机专业的必修课

能力要求

  • 能够越挫越勇、知难而上
  • 期望接受新知、提升能力
  • 掌握至少一门编程语言
  • 掌握部分入门算法

培养目标

  • 语言基础:熟练掌握c\c++\java\python其中一门编程语言以及语言特性
  • 算法:深入学习各类算法知识、建立完整的算法体系,掌握大部分大厂面试算法、能够高效完成开发中的功能制作
  • 团队协作:能够处理竞赛中团队协作解题的协同问题,能够和团队协作完成解题
  • 竞赛目标:有机会在信息学顶级赛事如acm-icpc拿到奖牌,有能力在重点比赛如蓝桥杯、团体程序设计竞赛等赛事斩获荣誉

学习路线

学习模式

推荐:

网课-博客-例题-博客总结-训练

如果有教科书:

书-课件-网课-博客-例题-博客总结-训练

流程并不复杂,对应资源稍后给出,不要被下面的庞大体系所吓倒。毕竟可怕的并不是知识内容复杂,而是根本不知道要学什么。所以下述路线建议仅在学习前供了解所学内容所用

入门

此部分较为零散,但每个学起来都不算困难。核心目的是要熟悉解题流程、建立算法思维、掌握部分简单套路。除特别标注外所有算法均需熟练掌握并快速编码。建议遇到想象的功能无法实现时搜索或者提问。

首先,需要学会分析时空复杂度(不必深入研究,能够根据循环等情况判断时间复杂度即可)

之后就可以开始进军算法

  1. 模拟、暴力

  2. 排序

    1. 冒泡、选择、插入、快排(重点)
    2. 希尔排序、归并排序(理解思想即可)
  3. 递推递归

  4. 贪心

  5. 二分

    1. 二分搜索
    2. 二分答案
  6. 位运算(非重点,掌握基本操作符,在遇到大神用二进制优化时着重记一下他的技巧即可)

基础

这部分是算法的基石,各模块间存在一定交叉。知识点看起来多且杂,实际上只要按照顺序学心里就有底,知道什么时候会结束。

数据结构初级

着重掌握各个数据结构的数组实现,因为stl慢且不灵活

  1. 队列
  2. 二叉树
  3. 哈希
  4. 单调栈单调队列

搜索

dfs、bfs

动态规划初级

这部分主要考验思维,抓住”解决一个问题时其所需要的子问题已全部解决“这个核心

  1. 背包问题

    01、完全、二维、分组、多重、单调队列优化多重背包

  2. 区间dp

  3. 树形dp

  4. 换根树dp

  5. 数位dp

  6. 状态压缩dp

  7. 概率dp

图论初级

  1. 图的概念及遍历

  2. 最短路系列

    floyd、bellman-ford、spfa、dijkstra

  3. 最小生成树

​ prim、kruskal

  1. 拓扑序
  2. 欧拉路、欧拉回路
  3. 二分图

数论初级

  1. 最大公约数
  2. 扩展欧几里得
  3. 同余
  4. 费马小定理
  5. 欧拉定理
  6. 逆元
  7. 中国剩余定理
  8. 线性筛
  9. 整除分块

中级

在同一个分点的知识建议连续学

数据结构中级

  1. 树状数组
  2. 线段树
  3. 权值线段树,扫描线
  4. 笛卡尔树,ST表,带权并查集
  5. 莫队,分块
  6. 序列数据结构
  7. DFS序,括号序,倍增
  8. 启发式合并,DSU on tree
  9. 重链剖分
  10. 树上数据结构

动态规划中级

  1. 树形、数位、区间、状态压缩dp进阶
  2. 计数dp
  3. 图上dp问题
  4. 单调队列以及斜率优化
  5. 四边形不等式决策单调性

数论中级

  1. 扩展欧拉定理
  2. lucas定理
  3. 阶和原根
  4. BSGS算法
  5. 积性函数
  6. 迪利克雷卷积

学习资源

  1. 各大oj平台

    oj平台的作用是在线判题和模拟比赛,各大oj的使用方式大同小异。核心内容是oj的判题规则

    请阅读:

    常见OJ(Online Judge)系统判题解释 - 知乎 (zhihu.com)

    1. 顶级竞赛平台codeforces

    Codeforces

    一般简称为cf

    该平台的特点是定期举行含金量很高的比赛来“上分”,每场比赛都会根据你的表现计分,以此来判断你目前的水平,然后就可以根据自己的分数来刷相应分段的题目

    cf上还有大量的比赛真题,支持模拟比赛

    关于codeforce的使用

    Codeforces游玩攻略 - ezoixx130 的博客 - 洛谷博客 (luogu.com.cn)

    1. 新手友好型平台洛谷

      首页 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

      洛谷的特点是好看的页面和强大的题单功能,我们的每日一题、模拟赛等内容也会在洛谷team上进行

    2. 百科全书级别平台vj

    Virtual Judge (vjudge.net)

    vj以强大的题库著称,你能在里边找到几乎你所能够遇到的所有题目

    1. 面试必备leetcode

      力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com)

      力扣是元老级别的算法平台,以应对面试算法为主。特点是题库庞大、题解清晰、判题返回结果详细

    那这些oj该侧重于谁呢?有以下这些建议

    1. 在cf上打训练赛锻炼自己,并进行补题
    2. 在洛谷完成我们团队的常规训练
    3. 在vj上寻找其它平台可能没收录的题
    4. 看心情在leetcode上刷题

    以上是笔者的个人习惯

  2. 算法书

    数据结构:

    数据结构教程-李春葆,非常的详实

    基本算法以及c++的stl:

    洛谷的深入浅出程序设计竞赛,官网有卖。特点是简单,并且例题和洛谷配套,可以随学随练

    高级算法:

    挑战程序设计竞赛第二版:数据结构内容会多一些

    挑战程序设计竞赛2:竞赛界神书

  3. 配套课程

    代码源(付费)

    代码源 (xiaoeknow.com)

    基本上笔者所学的所有内容均来自这里,有上述学习路线配套的所有课程

    蓝桥云课(付费)

    特点是简单明了,直击真题

    b站

    1. 我是小蜗蜗

      我是小蜗蜗的个人空间_哔哩哔哩_bilibili

      也是一位代码源的老师,有竞赛录播、知识讲解

    2. 大雪菜

      大雪菜的个人空间_哔哩哔哩_bilibili

      有每日一题,可以跟着训练

    3. 马士兵教育一左程云

      马士兵教育一左程云的个人空间_哔哩哔哩_bilibili

      主要讲面试算法

    mooc

    ​ 浙江大学数据结构

1
https://gitee.com/hubusugon/plans.git
git@gitee.com:hubusugon/plans.git
hubusugon
plans
培养计划
master

搜索帮助