• 贪心算法——知识点总结


    贪心算法
    一、基本概念:

    所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
    贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关,这也是与动态规划差别最大的地方。
    所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。
     

    二、贪心算法的基本思路:

    1.建立数学模型来描述问题。
    2.把求解的问题分成若干个子问题。
    3.对每一子问题求解,得到子问题的局部最优解。
    4.把子问题的解局部最优解合成原来解问题的一个解。
     

    三、贪心算法适用的问题

    贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
    实际上,贪心算法适用的情况很少。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。
     

    四、贪心算法的实现框架

    从问题的某一初始解出发;
    while (能朝给定总目标前进一步)
    {
    利用可行的决策,求出可行解的一个解元素;
    }
    由所有解元素组合成问题的一个可行解;
     

    五、贪心策略的选择

    因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。

    总结:

           如果大家比较了解动态规划,就会发现它们之间的相似之处。最优解问题大部分都可以拆分成一个个的子问题,把解空间的遍历视作对子问题树的遍历,则以某种形式对树整个的遍历一遍就可以求出最优解,大部分情况下这是不可行的。

           贪心算法和动态规划本质上是对子问题树的一种修剪,两种算法要求问题都具有的一个性质就是子问题最优性(组成最优解的每一个子问题的解,对于这个子问题本身肯定也是最优的)。

           动态规划方法代表了这一类问题的一般解法,我们自底向上构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,并且以其中的最优值作为自身的值,其它的值舍弃。而贪心算法是动态规划方法的一个特例,可以证明每一个子树的根的值不取决于下面叶子的值,而只取决于当前问题的状况。换句话说,不需要知道一个节点所有子树的情况,就可以求出这个节点的值。由于贪心算法的这个特性,它对解空间树的遍历不需要自底向上,而只需要自根开始,选择最优的路,一直走到底就可以了。

  • 相关阅读:
    Golang抓包:实现网络数据包捕获与分析
    基于红外传感器人体测温系统设计(STC89C51单片机)
    【无标题】
    阿里P8大佬,整理的从零构建企业级容器集群实战笔记,真涨薪神器
    Loki+Grafana查询语句
    基于Linux下的多人聊天室
    计算机网络-网络层(移动IP通信过程,网络层设备路由器,路由表与路由转发)
    【刷题记录】排列子序列
    修改hosts 不生效? 三种方法解决
    【Rust日报】2023-09-26 Deadpool v0.10 发布
  • 原文地址:https://blog.csdn.net/m0_71272694/article/details/128058754