iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python基于贪心算法解决背包问题示例
  • 649
分享到

Python基于贪心算法解决背包问题示例

示例贪心算法 2022-06-04 19:06:06 649人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文实例讲述了python基于贪心算法解决背包问题。分享给大家供大家参考,具体如下: 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出

本文实例讲述了python基于贪心算法解决背包问题。分享给大家供大家参考,具体如下:

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

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

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

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

python实现代码如下:


# coding=gbk
# 完全背包问题,贪心算法
import time
__author__ = 'ice'
class Goods:
  def __init__(self, goods_id, weight=0, value=0):
    self.id = goods_id
    self.weight = weight
    self.value = value
# 不适用于0-1背包
def knapsack(capacity=0, goods_set=[]):
  # 按单位价值量排序
  goods_set.sort(key=lambda obj: obj.value / obj.weight, reverse=True)
  result = []
  for a_goods in goods_set:
    if capacity < a_goods.weight:
      break
    result.append(a_goods)
    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))
# 花费时间:2.2807240614677942e-05
# 物品编号:3 ,放入重量:2,放入的价值:8,单位价值量为:4.0
# 物品编号:0 ,放入重量:2,放入的价值:4,单位价值量为:2.0
# 物品编号:4 ,放入重量:1,放入的价值:2,单位价值量为:2.0
# 物品编号:1 ,放入重量:1,放入的价值:0.75,单位价值量为:0.75

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

--结束END--

本文标题: Python基于贪心算法解决背包问题示例

本文链接: https://www.lsjlt.com/news/15818.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java使用贪心算法解决电台覆盖问题(示例详解)
    java使用贪心算法解决电台覆盖问题 代码实现 public class Demo { public static void main(String[] args) { ...
    99+
    2024-04-02
  • 贪心算法①--使用贪心算法思想解活动安排问题-python
    '''一、具有贪心选择结构 复杂问题可以划分成小问题解决二、具有贪心选择性质 是否能够用贪心选择开始一个最优起点,使用贪心选择能否得到一个完整解案例1:最优装载问题 有n个集装箱需要装上一艘重量为W的轮船。 其中...
    99+
    2023-10-26
    贪心算法 python 算法 数据结构 pycharm
  • Python实现贪心算法的示例
    目录一、贪心算法简介二、解决思路1.同学导师给的思路2.问题分解三、算法代码实现四、算法测试结果五、算法复杂性分析今天一个研究生同学问我一个问题,问题如下: 超市有m个顾客要结账,每...
    99+
    2024-04-02
  • 怎么使用Python贪心算法解决集合覆盖问题
    本文小编为大家详细介绍“怎么使用Python贪心算法解决集合覆盖问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python贪心算法解决集合覆盖问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在《算...
    99+
    2023-06-04
  • Java基于递归解决全排列问题算法示例
    本文实例讲述了Java基于递归解决全排列问题算法。分享给大家供大家参考,具体如下:排列问题设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排...
    99+
    2023-05-30
    java 递归 全排列
  • C++实现贪心算法的示例详解
    目录区间问题区间选点最大不相交区间数量区间分组区间覆盖Huffman树合并果子排序不等式排队打水绝对值不等式货舱选址区间问题 区间选点 给定 N 个闭区间 [ai,bi],请你在数轴...
    99+
    2024-04-02
  • Python 经典贪心算法之Prim算法案例详解
    最小生成树的Prim算法也是贪心算法的一大经典应用。Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树。 Prim算法过程: 一条边一条边地加, 维护一棵树。 初...
    99+
    2024-04-02
  • Python算法题解:动态规划解0-1背包问题
    概述背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给...
    99+
    2023-06-02
  • C++贪心算法处理多机调度问题详解
    多机调度问题思路 1、把作业按加工所用的时间从大到小排序 2、如果作业数目比机器的数目少或相等,则直接把作业分配下去 3、 如果作业数目比机器的数目多,则每台机器上先分配一个作业,如...
    99+
    2024-04-02
  • java贪心算法初学感悟图解及示例分享
    算法简介 1)贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致是最好或者最优的算法 2)贪心算法所得到的结果不一定是最优的结果(有...
    99+
    2024-04-02
  • ahooks解决React闭包问题方法示例
    引言 本文是深入浅出 ahooks 源码系列文章的第三篇,这个系列的目标主要有以下几点: 加深对 React hooks 的理解。学习如何抽象自定义 hooks。构建属于自己的 Re...
    99+
    2024-04-02
  • Java使用动态规划算法思想解决背包问题
    目录动态规划算法动态规划算法的思想最优性原理动态规划算法的三大特点动态规划算法中的0/1背包问题动态规划算法的优点小结动态规划算法 动态规划算法的思想 动态规划算法处理的对象是多阶段...
    99+
    2024-04-02
  • 解决TCP粘包/拆包问题的方法及示例
    TCP粘包和拆包是网络编程中常见的问题,特别是在数据传输的过程中,可能会发生将多个数据包粘在一起或将一个数据包拆成多个数据包的情况,这可能会导致应用程序无法正确解析数据,从而造成数据错误或系统故障。本文将介绍TCP粘包和拆包的原因、解决方案...
    99+
    2023-09-25
    网络 服务器 tcp/ip c# 网络协议
  • Java基于分治算法实现的棋盘覆盖问题示例
    本文实例讲述了Java基于分治算法实现的棋盘覆盖问题。分享给大家供大家参考,具体如下:在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其它方格,如何覆盖。四个L型骨牌如下图:棋盘...
    99+
    2023-05-30
    java 分治算法 棋盘覆盖
  • C++动态规划中关于背包问题怎么解决
    本篇内容主要讲解“C++动态规划中关于背包问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++动态规划中关于背包问题怎么解决”吧!一、分割等和子集-最后一块石头的重量II背包问题,难...
    99+
    2023-07-05
  • C++回溯与分支限界算法分别解决背包问题详解
    目录算法思想回溯代码分支限界代码算法思想 分支限界法与回溯法的求解目标不同。 回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,...
    99+
    2024-04-02
  • Java基于循环递归回溯实现八皇后问题算法示例
    本文实例讲述了Java基于循环递归回溯实现八皇后问题。分享给大家供大家参考,具体如下:运行效果图如下:棋盘接口public interface Piece { abstract boolean isRow(int line); abst...
    99+
    2023-05-31
    java 八皇后 算法
  • 关于决策树算法的Python示例分析
    本篇文章给大家分享的是有关关于决策树算法的Python示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一. 概述前面的一篇Python学习教程有跟大家介绍了决策树的一些基...
    99+
    2023-06-02
  • 基于Python绘制3D立体爱心图案的示例详解
    目录原理点画法(实心)代码运行效果点画法(空心)代码运行效果折线画法 (线团)代码运行效果等高线画法(线框)代码运行效果原理 1.使用python中的mtplotlib库。 2.立体...
    99+
    2022-11-16
    Python绘制3D立体爱心 Python绘制3D爱心 Python 3D 爱心
  • java基于递归算法实现汉诺塔问题实例
    本文实例讲述了java基于递归算法实现汉诺塔问题。分享给大家供大家参考,具体如下:package test;import java.util.List;import java.util.ArrayList;import java.util....
    99+
    2023-05-31
    java 递归算法 汉诺塔
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作