枚举 | 许多题目是可能观察出所有的可能解的,解的数量通常会小于等于指数级,稍好的情况是解的数量为多项式级。换句话说,许多题目至少有指数级的蛮力搜索解法。在没有其他解法,或者数据量很小的时候,可以尝试枚举。 | 1.抽象问题,寻找解的表示方法,好的表示方法常常是枚举法的关键 2.给出正解的判断标准 3.对所有解依次枚举判断,注意遍历次序,不要出现重复和无限循环
| |
分治 | 当问题可以分解为较小的问题,并且小问题之间呈现出独立性的时候,分治法是良好的解题策略。正确的使用分治法,常常能够将算法的复杂度下降一个级,例如从n下降到log n. 思考围绕两个核心问题:如何【分解】,如何【合并】 | 1.抽象问题,寻找问题的总体形式 2.尝试降低问题的规模,尝试分解总问题为相互独立的子问题 3.对子问题完成合并操作 | 二分查找 快速排序 归并排序 线性时间选择 最接近点对 循环日程表 |
动态规划 | 与分治相似,化繁为简,分化求解的思路在这里得到沿用,但与分治不同的是,动态规划分解出的子问题并不一定相互独立,而是可能有公共的子问题,如果使用分治法,那么可能公共子问题被求解多遍,但使用动态规划则可以避免这样的重复。 两大要素:【阶段】 【决策】 两大性质: 【最优子结构性质】——问题总的最优解包含子问题的最优解 【子问题重叠性质】——后续问题的解可以利用前面问题的计算结果 | 1.抽象问题,完成问题的表示 2.定义最有解,寻找重叠子问题性质 3.递归计算最优解 | 矩阵连乘 最长公共子序列 最大子段和 流水作业调度 |
贪心 | 针对许多动态规划可以解决的问题,利用相关性质,可能得到更加简洁的贪心解,而拟阵为贪心算法奠定了理论基础。 | 1.抽象问题,完成问题表示 2.寻找最有解的局部性质 3.设计贪心步骤 | 哈夫曼编码 最短路径 最小生成树
|
回溯 | 许多问题的解空间都可以看做树形或被组织成树形结构,对树形解空间进行深度优先遍历,并在遍历的过程中不断完成剪枝,也就是一旦发现行不通,立即退回上一步,换另一条路走,步步试探,步步为营。有通用解法之称。 | 1.抽象问题,将解组织成树形结构 2.确定正解性质和错解性质 3.深度优先遍历,正解输出,错解剪枝 | N皇后问题 0-1背包问题 旅行售货员问题 最大团问题 批处理作业调度问题 |
分支限界 | 仍然将问题的解空间组织成树形结构,但遍历的时候采用广度优先遍历,且目标是寻找某一个解。遍历的过程其实也是树的生长过程,每次选择最可能的分支进行扩展或说生长。 | 1.抽象问题,将解组织成树形结构 2.确定最可能解的性质 3.广度优先遍历,每次根据性质选择扩展分支 | 0-1背包问题 旅行售货员问题 最大团问题 批处理作业调度问题 |
数论 | 古老的学科,计算机中用到的知识有:素数,辗转相除,中国剩余定理等。 | ||
图论 | 复杂的关联和通路问题常常用到图论:最小生成树,最短路径,关键路径,最大流 是经典应用。 | poj-2560 Freckles | |
计算几何 | 计算几何是计算机的图形算法(区别于图论),实际是比较复杂的部分。点线面的关系(相交,平行,重合等),几何物体测量(长度,面积,体积),寻找凸包,寻找最近点是其典型问题。 | ||
模拟 | 许多实际问题可以看做对现场的模拟,已知一定的输入数据,已知事件的运行规则或者游戏规则,求解游戏结果或者最优解,这其实就是用计算机模拟事件或游戏的运行。 | poj-1666 Candy Sharing | |
高精度 | 计算机硬件的运算精度往往是有限的,无限制的高精度运算一般是通过软件模拟实现的,这块主要是要熟悉硬件运算逻辑的基本过程和字符模拟数字运算的方法 | poj-1001 test, poj-2562 Primary Arithmetic |
POJ题目分类
最新推荐文章于 2019-04-02 21:52:25 发布