Note: 红色的圈表示暂无页面,蓝色的圈表示有页面
Level 0
状态:刚接触编程,对编程十分陌生(比如说第一次成功print “Hello World”)
需要学习:编程语法,online judge的注册与运用,某些特殊模块
竞赛相关:无
练习相关:dmoj 3分题
笔记:
Level 1
状态:会使用至少一门编程语言的基本语法并解决简单问题
需要学习:抽象逻辑,简单算法(如:stack,queue,排序算法),时间复杂度
竞赛相关:USACO 铜组,ACSL,CCC的junior的前三题, Google Code Jam
练习相关:dmoj 5分题,CCC Junior 或 Senior Q1-2, Leetcode
笔记:
-
算法:暴力枚举 Complete Search -
理论基础:时间复杂度 Time Complexity -
算法:找质数 Seive for Primes -
数据结构:字典 Hashmap (Dictionary) -
数据结构:集合 Hashset (Set) -
算法:质因数分解 Prime Factorization -
数据结构:链表 Linked List -
数据结构:队列 Queue -
数据结构:栈 Stack -
数据结构:前缀和 Prefix Sum -
算法:递归 Recursion -
练习:模拟题 Simulation -
算法:分治算法 Divide and Conquer -
算法:排序算法 Sorting Algorithm
Level 2
状态:能熟练的用编程解决涉及简单数据结构的问题
需要学习:高级算法,动态规划,图论算法
竞赛相关:USACO 银组甚至金组,CCC的junior甚至senior, Google Code Jam
练习相关:USACO 真题刷题,CCC Senior,Leetcode
笔记:
-
算法:二分查找 Binary Search -
理论知识:图的表达 How to Represent a Graph -
数据结构:二叉树 Binary Tree -
数据结构:最大堆,最小堆 Min/Max Heap -
数据结构:优先队列 Priority Queue -
数据结构:并查集 Union-Find Disjoint Set -
算法:拓扑排序 Topological Sort -
算法:贪心算法 Greedy Algorithm -
算法:水漫金山 Flood Fill -
算法:广度优先算法 Breadth First Search -
算法:深度优先算法 Depth First Search -
算法:统一代价搜索算法 Uniform Cost Search -
算法:最小生成树 Min Span Tree -
算法:动态规划 Dynamic Programming
Level 3
状态:能够快速将实际问题抽象为数学问题并使用熟练运用合适的算法解决问题,一定程度上对问题的数学结构进行同构变换来最大化算法效率
需要学习:金组及以上的高级算法,这些算法相对复杂一点并针对特定情境有较好的性能 & 数学
竞赛相关:USACO 金组,白金, Google Code Jam
练习相关:USACO真题,Leetcode Hard 题目
笔记:
-
Case Study: nim 与动态规划 -
数据结构:二位前缀和 2D Prefix Sum -
数据结构:二叉索引树(树状数组)Binary Index Tree -
数据结构:线段树 Segment Tree -
数据结构:博弈树 Game Tree -
算法:模运算Modular Arithmetic -
算法:弗洛伊德算法Floyd-warshell Algorithm
Level 4
状态:学完前面的东西
需要学习:找到一些感兴趣的相对 narrow down 一点的领域 - 例如 人工智能,数据科学,加密货币等学习 可以看看这里的其他笔记
竞赛相关:Kaggle,等的专业领域公开比赛,做科研活动,自己做一些小 Project
练习相关:自己找点好玩的东西做或者去这里看看学长学姐们自己做的东西玩owo
下面这些内容一般不能在竞赛中使用,但是在写自己的 Project 的时候会很有用。