Skip to content

面临决策时,局部最优,即是全局最优

三个阶段
  • 确定最优子结构,子结构的最优合并到全局,即是最优
  • 构建决策关键,包含所有子问题的最优决策
  • 判断是否贪心算法结果即是问题的最优结果,一般使用反证法
贪心算法的优劣
  • 简单易实现、一般时间复杂度较低,解决局部最优问题
  • 局部最优不一定全局最优,需要证明最优方案
    • 反证法:如果交换方案中任意两个元素/相邻的两个元素后,答案不会变得更好,那么可以推定目前的解已经是最优解了。
    • 归纳法:先算得出边界情况(例如 n=1 )的最优解F1,然后再证明:对于每个nFn+1 都可以由Fn推导出结果。
贪心算法案例
可碎片化的背包问题
哈夫曼编码问题
  • 描述:给定编码字符集和任意字符 c 出现的频率 f(c) , c 的一个前缀编码方案 对应一棵二叉完全树T ,求找到使平均长度最短的前缀码方案,例:如下字符集用0-1串编码

    abcdefghij
    0.220.130.070.060.20.10.070.060.10.07
  • 分析:字符在T中的深度记为: dT(c) ,平均码长 B(T)=cCf(c)dT(c)huffman_tree.hpp

  • 题目代码: