基本知识结构 :
• 编码
• 文件输入 / 输出
• 大文件的问题
• 行超长的问题
• 数学运算
• 字符串处理
• 表达式求值 / 展开
• 英文数字朗读
• 简单程序的模拟执行 ( 文法识别 )
• 递归
• 数据结构
• 表示
• 线性结构
• 树 : 边列表 , 父亲 , 遍历结果 , “ 括号表示 ”
• A(B(H(), I(), J()), C(D(), E(F(), G())))
• 图
• 线性结构基本算法
• 排序
• 二分检索
• * 串匹配 (KMP)
• 树
• 遍历 : 二叉树 , 层次
• *** 求 huffman 树
• 多叉树转二叉树
• 完全二叉树数组表示
• 图
• 遍历 : DFS, BFS
• 拓扑排序
• * 最小生成树
• * 最短路
• * 欧拉路 / 回路
• ** 关键路径
• 功能数据结构
• 散列表 ( 哈希表 ): 字典
• * 排序二叉树 (BST): 字典 , 易扩充
• * 堆 : 动态取最小值
• ** 字母树 (Trie): 字符串字典
• *** 线段树 : 区间操作 , 易扩充
• 算法设计
• 基本算法设计思想
• 枚举
• 贪心
• 递归
• 递推
• ** 构造
• 模拟
• 分治
• *** 解递归方程 .
• 解方程结论 : T(n)=2T(n/2)+n
• 归并排序 / 逆序对 , 快速排序,第 k 大数
• ** 最近点对
• 搜索
• 搜索算法
• 深度优先搜索
• 回溯法
• 广度优先搜索
• ** 启发式搜索
• 双向广度优先搜索
• 经典问题
• n 皇后问题 ( 约 30 行 )
• 8 数码问题 ( 一定要写 )
• ** 骑士遍历
• 动态规划
• 状态 ó 状态转移方程
• 决策、 ( 边界条件 ) 、 ( 阶段 )
• 最优子结构、无后效性
• 实现 : 自底向上递推 , 自顶向下的记忆化递归
• 递推 : 附加时 / 空开销小 , 可用滚动数组 , 好调试
• * 递归 : 直观 / 好写 / 好想 , 只解需要解的东西
• ** 递推的两种实现
• 动态规划
• 最长上升子序列 (LIS)/ 导弹拦截第一问
• 最长公共子序列 (LCS)/ 回文词 ioi2000
• 1 2 3 4 5 6 7
• 1 3 2 4 6 7 8
• 最优排序二叉树 . O(n3)
• 背包问题 ?
• 最优矩阵乘法 A * (B * C) * D * E. O(n3)
• 花店 IOI99 little flower shop
• 乘积最大 . 2000
• * 方格取数 . 2000
• * 石子合并 . ioi95
• 动态规划动机
• 线性结构
• 树状
• 数值重复 / 数值范围
• n 个人 , 每个数不超过 m, nm/2
• d[i,j] = d[i-1,j] or d[i-1,j-a[i]]
• * 有向无环图 ( 容易进行状态抽象 )
• 数学
• 组合数学
• 基本计数原理 : 加法 / 乘法原理 , 排列组合 , 容斥原理
• 递推关系 , 常见的组合数
• fibonacci 数
• Catalan 数
• * 两类 Stirling 数
• * 母函数
• ** 其他计数方法 : Polya 定理 , 反演
• 代数
• 高斯消元 : 程序 , 特殊情况 , 溢出
• *** 矩阵乘法
• * 置换、循环 . 最小交换代价 /8 数码问题无解
• 几何
• 线段相交 / 交点
• 多边形面积
• 点和多边形的位置关系
• * 凸包
• 数论
• 最大公约数 , 求 ax+by=gcd(a,b) 的解
• 素数判定
• 素数筛
• 同余
• ** 欧拉定理 , *** 欧拉函数
• ** 中国剩余定理
• 数值计算方面
• 简化 : 如洪特规则
• pi/e 的高精度计算
• **** 数值积分 : 梯形法 , …
• 非线性方程求根
• 二分法 : 每次计算 f(x)
• 模拟法 , [0,10] 求根 , 保留两位小数
• ****Newton 迭代
• **** 一般意义下的迭代 : x=(a-cos(x)-x2)1/3