c++算法之贪心

来源:互联网 发布:linux安装网站安全狗 编辑:程序博客网 时间:2024/05/17 20:34

一、基本概念

  1. 什么是贪心算法:
    贪心算法(又称贪婪算法,GreedyAlgorithm)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
  2. 基本思路
    (1)把求解的问题分成若干个子问题。  
    (2)对每一子问题求解,得到子问题的局部最优解。  
    (3)把子问题的解局部最优解合成原来解问题的一个解。
  3. 算法实现。
    (1)从问题的某个初始解出发。
    (2)采用循环语句,当可以向求解目标前进一步时,就根据局部最优策 略,得到一个部分解,缩小问题的范围或规模。
    (3)将所有部分解综合起来,得到问题的最终解。

二、贪心方法的基本思想

贪心是一种解题策略,也是一种解题思想 使用贪心方法需要注意局部最优与全局最优的关系,选择当前状态的局部最优并不一定能推导出问题的全局最优
利用贪心策略解题,需要解决两个问题: 该题是否适合于用贪心策略求解 如何选择贪心标准,以得到问题的最优解

三、贪心法的特点

1.贪心选择性质:算法中每一步选择都是当前看似最佳的选择,这种选择依赖于已做出的选择,但不依赖于未做的选择。

2.最优子结构性质:算法中每一次都取得了最优解(即局部最优解),要保证最后的结果最优,则必须满足全局最优解包含局部最优解。
但并不是所有具有最优子结构的问题都可以用贪心策略求解。因为贪心往往是盲目的,需要使用更理性的方法——动态规划(例如“0-1背包问题”与“部分背包问题”)

四、贪心策略与其他算法的区别

1.贪心与递推:与递推不同的是,贪心法中推进的每一步不是依据某一固定的递推式,而是当前看似最佳的贪心决策,不断的将问题归纳为更加小的相似的子问题。所以归纳、分析、选择正确合适的贪心策略,是正确解决贪心问题的关键。

2.贪心与动态规划:与动态规划不同的是,贪心是鼠目寸光;动态规划是统揽全局。

原创粉丝点击