贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

完全背包问题:给定n个物品和一个容量为C的背包,物品i的重量是Wi,其价值为Vi,背包问题是如何选择入背包的物品,使得装入背包的物品的总价值最大,与0-1背包(要么选取某个物品,要么不能选取,不能只选取一个物品的一部分)的区别是,在完全背包问题中,可以将物品的一部分装入背包,但不能重复装入。

设计算法的思路很简单,计算物品的单位价值,然后尽可能多的将单位重量价值高的物品放入背包中。

# -*- coding: utf-8 -*-
"""
Created on Thu Mar 28 16:56:15 2019@author: DELL
"""# 完全背包问题,贪心算法
import time
__author__ = 'xxx''''商品类'''
class goods:def __init__(self, goods_id, weight=0, value=0):self.id = goods_idself.weight = weightself.value = value# 不适用于0-1背包
def knapsack(capacity=0, goods_set=[]):#capacity:容量# 按单位价值量排序goods_set.sort(key=lambda obj: obj.value / obj.weight, reverse=True)result = []for a_goods in goods_set:#循环if capacity < a_goods.weight:breakresult.append(a_goods)#向result列表中添加商品capacity -= a_goods.weight#所剩容量减去加入的商品重量if len(result) < len(goods_set) and capacity != 0:result.append(goods(a_goods.id, capacity, a_goods.value * capacity / a_goods.weight))return result#商品列表
some_goods = [goods(0, 2, 4), goods(1, 8, 6), goods(2, 5, 3), goods(3, 2, 8), goods(4, 1, 2)]start_time = time.clock()
res = knapsack(6, some_goods)
end_time = time.clock()
print('花费时间:' + str(end_time - start_time))for obj in res:print('物品编号:' + str(obj.id) + ' ,放入重量:' + str(obj.weight) + ',放入的价值:' + str(obj.value), end=',')print('单位价值量为:' + str(obj.value / obj.weight))# 花费时间:1.1730337135418267e-05
# 物品编号:3 ,放入重量:2,放入的价值:8,单位价值量为:4.0
# 物品编号:0 ,放入重量:2,放入的价值:4,单位价值量为:2.0
# 物品编号:4 ,放入重量:1,放入的价值:2,单位价值量为:2.0
# 物品编号:1 ,放入重量:1,放入的价值:0.75,单位价值量为:0.75

贪心算法-完全背包问题相关推荐

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

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

  2. 算法设计与分析(第四周)贪心算法、背包问题

    贪心算法 顾名思义,贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择.当然,希望贪心算法得到的最终结果也是整体最优的. 虽然贪心算 ...

  3. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题

    前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...

  4. 贪心算法解决背包问题

    贪心算法解决背包问题 问题描述: 给定 n 个物品和一个容量为 C 的背包,请给出物品装入背包的方案,使得背包中物品的总价值 M 最大,并满足: 1.每个物品 I 的重量为 wi,价值为 vi. 2. ...

  5. 用贪心算法解背包问题(装载问题)

    题目描述 给定一个最大载重量为M的卡车和N种食品,有食盐,白糖,大米等.已知第 i 种食品的最多拥有Wi 公斤,其商品价值为Vi元/公斤,编程确定一个装货方案,使得装入卡车中的所有物品总价值最大. 题 ...

  6. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题示例

    本文实例讲述了JS基于贪心算法解决背包问题.分享给大家供大家参考,具体如下: 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局 ...

  7. 贪心算法 背包问题 java_贪心算法求解背包问题

    一.贪心算法 1.贪心算法概念 贪婪算法(Greedy algorithm)是一种对某些求最优解问题的更简单.更迅速的设计技术.用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测 ...

  8. 贪心算法之——背包问题(nyoj106)

    背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<= ...

  9. 贪心算法 0-1背包c语言,贪心算法0-1背包问题(算法实验代码).pdf

    . 实验三. 0-1 背包问题(贪心算法) 实验代码: #include int max(int a,int b) { if(a>b) return a; else return b; } vo ...

  10. 贪心算法 背包问题 java_贪心算法解背包问题

    背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1 <= i <= n.这2类问题都具有最优子结构性质,极为相似,但背包问 ...

最新文章

  1. “Hey Siri” 背后的黑科技大揭秘!
  2. 2015年的ResNet潜力都挖掘出来了吗?新研究:不用蒸馏、无额外数据,性能还能涨一波...
  3. chrmoe debug
  4. 深度解析PHP数组函数array_chunk
  5. python分组函数_Python中如何按列分组和按自己的函数汇总
  6. 开源点评:Protocol Buffers介绍
  7. 介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎
  8. Python批量Excel文件数据导入SQLite数据库的优化方案
  9. 程序员的职业素养---转载
  10. 省市县联动列表html代码,若依添加省市县联动三级菜单
  11. python 中搞错工作路径的意思导致的相对路径产生bug:[Errno 2] No such file or directory:
  12. 前端移动端端测试——显示控制台
  13. 科属种XML文档三级树状图浏览的实现
  14. 手指计数——长在身上的计算机
  15. node--puppeteer网页截屏
  16. 一份规范的接口文档应该包括什么内容?
  17. IIS 服务器常见漏洞
  18. 东北天坐标系、西安80坐标系如何在mars3d加载?
  19. 计算机新建文件夹的步骤打开,电脑怎样为自己新建的文件夹加密,只能自己打开. 爱问知识人...
  20. 时间管理(4:步骤分解)

热门文章

  1. ios 融云 重写对话列表_iOS开发融云即时通讯集成详细步骤
  2. java实现9*9乘法表
  3. 配置mysql读写分离
  4. 抖音视频批量下载,一个软件就够了,手把手教你下载抖音无水印视频。
  5. ensp下载最新版及所有资源包免费分享下载
  6. ubuntu20.04.1下安装qt4相关依赖库
  7. 5G组网-SANSA
  8. x240无线网卡驱动 linux,Linux2.6移植:DM9000驱动
  9. Visual Studio Code (vscode)配置LaTeX最详细版(vscode下载安装+基本设置+内外pdf查看器设置+个人配置代码)
  10. 反转链表-迭代反转法