NOI 范围内贪心算法的基本模型总结

· · 算法·理论

NOI 范围内贪心算法的基本模型总结

1. 区间类问题

(1) 区间调度

(2) 区间覆盖

(3) 区间选点

2. 图论类问题

(1) 最小生成树

(2) 最短路径(Dijkstra 算法)

(3) 最大流中的贪心

3. 背包类问题

(1) 分数背包问题

(2) 0-1 背包问题中的贪心优化

4. 排序与分配类问题

(1) 任务调度问题

(2) 霍夫曼编码 (NOI 2015)

5. 贪心选取问题

(1) K 次取数问题

(2) 最大/最小代价问题

6. 字符串类问题

(1) 字典序最小问题

(2) 最小循环移位

7. 数列与数组类问题

(1) 单调队列优化

(2) 数列分组问题

8. 数据结构结合贪心

(1) 并查集优化

(2) 优先队列结合贪心

9. 证明贪心算法的正确性

在实际应用中,贪心算法需要满足以下三个条件,确保其解法正确:

  1. 贪心选择性质:局部最优解可以构造全局最优解。

    • 示例:区间调度问题中选择结束时间最早的区间,不影响后续选择的最优性。
  2. 无后效性:当前选择不影响后续选择的合法性或最优性。

    • 示例:最短路径中,每次选择最短距离点后,不会改变未处理点的最短路径。
  3. 子问题最优性:子问题的最优解可以合并成原问题的最优解。

    • 示例:最小生成树中每次加入最小权边不会破坏已选部分的最优性。

10. 排队问题

(1) 排队取水问题

(2) 排队结账问题

11. 工程调度问题

(1) 最早完成时间优先

(2) 作业工期问题

12. 数列与区间问题

(1) 和最大子数组问题

(2) 数列分组问题

13. 资源分配问题

(1) 加油问题

(2) 最优工人分配问题

14. 几何问题

(1) 最近点对问题

(2) 凸包问题

15. 动态维护问题

(1) 动态区间最大值

(2) 动态序列第 k 小值

16. 博弈与胜率问题

(1) 胜率最大化问题

(2) Nim 博弈

17. 贪心搜索与剪枝

(1) 八皇后问题

(2) 最短 Hamilton 回路