zoukankan      html  css  js  c++  java
  • 01背包与贪心的区别

    贪心法所不能解决的01背包问题即不可分割的问题
    01背包问题是 考虑整体最优解

    贪心策略适用的前提是:局部最优策略能导致产生全局最优解。

    例题分析编辑
    例题1、
    [0-1背包问题]有一个背包,背包容量是M=150。有7个物品,物品不可以分割成任意大小。
    要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
    物品 A B C D E F G
    重量 35kg 30kg 6kg 50kg 40kg 10kg 25kg
    价值 10     40     30   50    35    40     30
    分析:
    目标函数:∑pi最大
    约束条件是装入的物品总重量不超过背包容量:∑wi<=M(M=150)
    ⑴根据贪心的策略,每次挑选价值最大的物品装入背包,得到的结果是否最优?
    ⑵每次挑选所占重量最小的物品装入是否能得到最优解?
    ⑶每次选取单位重量价值最大的物品,成为解本题的策略。
    值得注意的是,贪心算法并不是完全不可以使用,贪心策略一旦经过证明成立后,它就是一种高效的算法。
    贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。
    可惜的是,它需要证明后才能真正运用到题目的算法中。
    一般来说,贪心算法的证明围绕着:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。
    对于例题中的3种贪心策略,都是无法成立(无法被证明)的,解释如下:
    ⑴贪心策略:选取价值最大者。
    反例:
    W=30
    物品:A B C
    重量:28 12 12
    价值:30 20 20
    根据策略,首先选取物品A,接下来就无法再选取了,可是,选取B、C则更好。
    ⑵贪心策略:选取重量最小。它的反例与第一种策略的反例差不多。
    ⑶贪心策略:选取单位重量价值最大的物品。
    反例:
    W=30
    物品:A B C
    重量:28 20 10
    价值:28 20 10
    根据策略,三种物品单位重量价值一样,程序无法依据现有策略作出判断,如果选择A,则答案错误。
    【注意:如果物品可以分割为任意大小,那么策略3可得最优解】
    对于选取单位重量价值最大的物品这个策略,可以再加一条优化的规则:对于单位重量价值一样的,则优先选择重量小的!这样,上面的反例就解决了。
    但是,如果题目是如下所示,这个策略就也不行了。
    W=40
    物品:A B C
    重量:25 20 15
    价值:25 20 15
    附:本题是个DP问题,用贪心法并不一定可以求得最优解,以后了解了动态规划算法后本题就有了新的解法。

  • 相关阅读:
    达叔系列——神经网络编程基础
    win10安装pytorch——前面有坑,快跳进去鸭
    Python基础(六)——面向对象编程
    Python基础(五)——闭包与lambda的结合
    Python基础(四)——迭代器/对象,生成器
    Mysql优化(出自官方文档)
    Mysql优化(出自官方文档)
    Scala语言笔记
    Scala语言笔记
    Scala语言笔记
  • 原文地址:https://www.cnblogs.com/Ritchie/p/5424735.html
Copyright © 2011-2022 走看看