算法设计--贪心算法

210 阅读2分钟

一、贪心法的基本思想

  • 贪心法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路径问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似
1.贪心算法具有2个重要的性质:
  • 贪心选择性质
    • 是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的重要区别
    • 动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题
  • 最优子结构性质
    • 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征
2.贪心算法与动态规划算法的差异
  • 贪心算法每次都是局部最优
  • 动态规划算法每次都是整体最优
3.贪心算法应用领域
  • 活动选择问题
  • 最优装载问题
  • 哈夫曼编码
  • 单源最短路径
  • 最小生成树
  • 多机调度问题