贪婪算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
      我们还是从例子中进行理解,以背包问题为例:

“超市大赢家”提供了50种商品作为奖品供中奖顾客选择,车的容量为1000dm3 , 奖品占用的空间为vi dm3 ,价值为wi 元。

对于此类问题,我们通常不考虑空间形状,即只要体积够就能放下。我们先建立0-1优化模型:

我们的目标就是拿取物品的价值最高,约束是拿出的商品体积总和不超过车容量

那么贪婪算法是怎么解决这个问题的呢?
方案一 最懒的拿法1,从最贵的拿起,直到放不下为止,最后发现可以取17种商品,总占用空间952,总价值2708。
方案二 最懒的拿法2,从最大的拿起,直到放不下为止,最后发现可以取15种商品,总占用空间970,总价值2318。
方案三 每个商品的价值:体积=性价比,从性价比最高的拿起,直到放不下为止,最后发现可以取26种商品,总占用空间996,总价值3095.

clc;clear;close all;
limit = 1000;%容量
v = [1,32,35,10,30,38,25,85,10,25,...70,80,20,60,20,2,50,22,72,32,... 30,50,45,30,60,66,50,70,50,15,...22,30,10,55,40,30,50,65,40,48,...82,10,20,25,4,55,28,25,4,32]';%商品体积
w = [1,118,98,20,105,100,95,198,15,50,...192,220,65,110,56,3,162,82,180,96,...73,120,75,88,72,165,155,180,70,30,...115,77,10,130,100,60,80,66,125,122,...208,58,69,63,5,160,90,158,8,101]';%商品价值n = 1 : length(w);%% 方案一x = [v,w,n'];x = sortrows(x,-2);%按价值从大到小排序count = 1;while count <= length(w) && sum(x(1:count,1)) <= 1000 count = count + 1;endchoice = sort(x(1:count -1,3));%选择最终取哪几个商品vc = sum(x(1:count-1,1));%计算总体积wc = sum(x(1:count-1,2));%计算总价值
disp('方案一');
disp(['最终选取商品:',num2str(choice')]);
disp(['占用总体积:',num2str(vc)]);
disp(['总价值为:',num2str(wc)]);
disp('*************************************************************************')
%% 方案二x = [v,w,n'];x = sortrows(x,-1);%按体积从大到小排count = 1;while count <= length(w) && sum(x(1:count,1)) <= 1000 count = count + 1;endchoice = sort(x(1:count -1,3));%选择最终取哪几个商品vc = sum(x(1:count-1,1));%计算总体积wc = sum(x(1:count-1,2));%计算总价值
disp('方案二');
disp(['最终选取商品:',num2str(choice')]);
disp(['占用总体积:',num2str(vc)]);
disp(['总价值为:',num2str(wc)]);
disp('*************************************************************************')%% 方案三w2 = w./v;%计算性价比x = [v,w2,w,n'];x = sortrows(x,-2);%按性价比从大到小来排count = 1;while count <= length(w) && sum(x(1:count,1)) <= 1000 count = count + 1;endchoice = sort(x(1:count -1,3));%选择最终取哪几个商品vc = sum(x(1:count-1,1));%计算总体积wc = sum(x(1:count-1,3));%计算总价值
disp('方案三');
disp(['最终选取商品:',num2str(choice')]);
disp(['占用总体积:',num2str(vc)]);
disp(['总价值为:',num2str(wc)]);

贪婪算法完全依赖于你的贪婪策略,所以我们上面的三种贪婪策略所获得的结果都不同,我们从策略本身是看不出结果好坏的。我只提出了几个比较常见的贪心策略,大家也可想想看其他的策略,此题的最大价值为3103。

当然贪婪算法重在他的思想“贪”,又可以称之为“懒”,也可以用在其他规划问题上,比如说最短路问题,因为懒,所以我每一步只选择当前最短的方案,直到终点...

贪婪算法————背包问题相关推荐

  1. 算法一(python)

    文章目录 二分查找 大O表示法 数组&链表 选择排序 递归 栈 递归调用栈 分而治之 快速排序 散列表 缓存 冲突 填装因子 良好的散列函数 广度优先搜索(breadth-first sear ...

  2. 算法思想(持续更新...)

    文章目录 二分法 递归 分而治之(D&C,divide and conquer) 贪婪算法 背包问题 集合覆盖问题 NP完全问题 动态规划 再探背包问题 细节补充 二分法 参照二分查找. 递归 ...

  3. 贪婪算法、递归计算、动态规划背包问题

    //贪婪算法计算背包问题public static double ksack(double[] values, double[] weights, int capacity){double load ...

  4. 用贪婪算法解决背包问题_解决主要算法问题的贪婪策略

    用贪婪算法解决背包问题 Introduction: 介绍: Let's start the discussion with an example that will help to understan ...

  5. 部分背包的贪婪算法 java_使用JAVA实现算法——贪心算法解决背包问题

    packageBasePart;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException ...

  6. java01背包问题算法_经典动态规划--01背包问题

    背包问题具体例子:假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3.物品a1重量为3kg,价值为4:物品a2重量为4kg,价值为5:物品a3重量为5kg,价值为6.将哪些物品放入背包 ...

  7. 自顶向下 与自底向上解决01 背包问题

    01背包问题具体例子:假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3.物品a1重量为3kg,价值为4:物品a2重量为4kg,价值为5:物品a3重量为5kg,价值为6.将哪些物品放入 ...

  8. 贪心问题JAVA_java背包问题(贪心法)

    完全背包问题 一个旅行者有一个最多能用m公斤的背包,现在有n种物品,每件的重量分别是W1,W2,...,Wn,每件的价值分别为C1,C2,...,Cn.若的每种物品的件数足够多.求旅行者能获得的最大总 ...

  9. Python贪婪算法

    贪婪算法 每步均选择局部的最优解,重复此过程,最终即得到全局的最优解 简而言之就是每步都采用最优解 优点: 简单易行 缺点: 并非在所有情况下都奏效 经典的问题: 背包问题 集合覆盖问题 贪婪算法下的 ...

最新文章

  1. android 自动打开第三方应用程序,Android如何做到应用程序图标隐藏,由第三方程序显示启动...
  2. 华为mate x2什么时候更新鸿蒙系统,华为Mate X2真机发布,今年四月可升级鸿蒙系统...
  3. saltstack批量修改root密码
  4. 我做的小学二年级公开课《生命,生态和安全》的教案
  5. 原神服务器维护后抽奖池会更新吗,原神:更新维护一小时,补偿60原石,玩家祈求多维护几天!...
  6. php中计算时间差的几种方法,PHP 中计算时间差的几种方法
  7. ajax_典型应用_添加商品标题
  8. python决策树预测模型_「数据挖掘入门系列」数据挖掘模型之分类与预测 - 决策树...
  9. Android 模拟器设置
  10. 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT(附思维导图)
  11. win10启动修复_高手教你怎样在Win10上修复主引导记录(MBR),轻松解决启动故障...
  12. 作为Fab-Liter战略的一部份,安森美剥离晶圆制造厂
  13. 华为桌面小程序在哪里_微信Windows版更新至3.0:批量管理联系人,小程序可添加至桌面...
  14. 解决MacBook Pro M2关于inport tensorflow 出现的Illegal instruction: 4
  15. Raphael.js 在vue中使用说明, 以杭州市地图为例
  16. 如何实现一个精简版的redux-saga
  17. Singing Contest
  18. 使用电源管理模块有效控制GaN功率放大器的电源开关
  19. 腾讯云tcp认证考试如何备考?腾讯云tcp认证证书含金量高吗?
  20. C++ 指针与取地址

热门文章

  1. Docker 快速上手学习入门教程 1
  2. mysql表空间查询
  3. Unity ADB调试和一些常用命令
  4. markdown(md)编辑 全部格式
  5. Win7中双击bat文件变成打开文本编辑器后如何恢复
  6. Java集成华为云对象存储
  7. java 绑定mac地址_如何JAVA实现使用TrueLicense在证书中绑定PC的MAC地址,以防止拷贝应用...
  8. iVMS-4200 Vs区别_76840红单足球预测 法甲 21:00 安格斯 VS 梅斯
  9. fackbook登录获取大头像
  10. vue部署后饿了么组件的图片不见了