YCU算法集训队新人指导

初期算法:

  1. 学会计算时间复杂度和空间复杂度,这个非常重要!!!!
  2. 枚举:
    1)傻逼枚举:没啥好说的,入门题
    2)二进制枚举:采用二进制模拟的枚举,一般数据量不超过20,大于20可以考虑用折半来优化
  3. 排序:从最简单的冒泡排序,选择排序 到 希尔排序, 快速排序, 堆排序,归并排序。(学完简单的就学怎么调用stl里的排序函数, 后面的慢慢来)
  4. 贪心:慢慢练(一般签到及以下,重要是贪心延伸出来的dp,这个很重要,简单的dp算铜牌题,难的可能银牌或金牌,玄幻的dp)
  5. 递归和分治:计算机入门算法,慢慢练
  6. 递推:练多了就会掌握诀窍
  7. 傻逼模拟,一般要求心思缜密,代码量很长。(这一块好好练,很多高级算法基于思维模拟)
  8. 前缀和,差分,二分
  9. 学习stl,要求会用就行。
  10. 搜索:
    1)广度优先搜索(bfs):
      用途:找出迷宫等一些矩形图的一条最优路线, 输出到终点的最短路径,距离等。
      剪枝及优化:奇偶剪枝,切比雪夫距离,曼哈顿距离,双向bfs
    2)深度优先搜索(dfs):
      用途:用途较广。
      剪枝及优化:剪枝技巧非常多,不列举。
      衍生:记忆化搜索,动态规划(先了解为什么dfs可以衍生出这两个东西)
  11. 并查集:掌握它的用途,还有一些优化(ps:路径压缩),可深入学习种类并查集,带权并查集
  12. 分块:分块本质上是一种暴力算法,简单暴力,越复杂越没有套路的题目就是用分块做,常规的区间题目也可以做,就是复杂度有点高。
  13. 树状数组:一种比较简单的树。详情百度。
  14. 线段树:线段树也是属于简单的数据结构,可以处理很多的问题,可以衍生出主席树(中期算法),这个我波佬贼强。
  15. 数学知识可以贯穿整个知识体系,每天学一点,列一些基础的:
    1)素数:素数判定,素数筛法;
    2)同余:gcd, lcm, 逆元, 欧拉定理,exgcd, 费马小定理,威尔逊定理,中国剩余定理, 扩展中国剩余定理;(起码得会证明)
    3)组合数学:组合数学基础, 康拓定理,二项式定理, 杨辉三角,抽屉原理,容斥原理,卡特拉数,卢卡斯定理
    4)线性代数,线性代数基础,叉积重点,高斯消元重点->线性基
    5)博弈论:巴什博弈,威佐夫,尼姆博弈, ANTI-尼姆博弈,SG函数, ANTI-SG函数(sg函数要最好有图的基础后再学)
    --尴尬的分界线(以上学习一年后必学会)--

中期算法:

  1. 图论:这个专题重在模板理解和运用
    1)入门肯定最短路:各种模板记住怎么用以及理解就行。 最短路入门合辑
    2)二分图匹配:这个!入门贼简单!深入贼难,带权二分图匹配其实也不是那么难,理清思路,再多敲几遍代码,基本上就差不多了。
    3)网络流:波佬口头禅——这不是网络流拆点傻逼题吗
  2. 计算几何:这一块内容比较难学,很多题大部分是公式板子,我也有一篇博客。计算多边形重心

嗯…很多很多比赛,以后我们可以一起交流,一起锻炼,一起成长。

你可能感兴趣的:(YCU算法集训队新人指导)