跳到正文

第8章学习笔记:贪心算法与交换证明

课程笔记

每次选择都要证明可扩展为全局最优,而不是凭局部直觉。

关联:章节 第8章 贪心算法与交换证明

第8章笔记:贪心算法与交换证明

目标

每次选择都要证明可扩展为全局最优,而不是凭局部直觉。

七课依赖

  • 区间调度的最早结束:围绕区间调度的最早结束先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 区间覆盖与端点选择:围绕区间覆盖与端点选择先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • Huffman合并与最优前缀码:围绕Huffman合并与最优前缀码先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 最小字典序构造:围绕最小字典序构造先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 排序不等式与配对:围绕排序不等式与配对先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 拟阵贪心入口:围绕拟阵贪心入口先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 贪心失败的最小反例:围绕贪心失败的最小反例先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。

复杂度与适用条件表

算法对象 不变量/复杂度来源 使用边界
区间调度的最早结束 围绕区间调度的最早结束先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
区间覆盖与端点选择 围绕区间覆盖与端点选择先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
Huffman合并与最优前缀码 围绕Huffman合并与最优前缀码先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
最小字典序构造 围绕最小字典序构造先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
排序不等式与配对 围绕排序不等式与配对先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
拟阵贪心入口 围绕拟阵贪心入口先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
贪心失败的最小反例 围绕贪心失败的最小反例先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 贪心需要交换、领先或拟阵结构证明;换一个目标函数就可能失败。 本课必须再检查边界输入、整数溢出、下标和不可行状态。

复盘

每题保存暴力、优化、证明、四组边界测试和首个WA输入;一周后换数据重做。