背包问题解析(一)-贪心算法

一、题目:
有N件物品和一个容量为V的背包。第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。
 
二、解决思路:
本题刚开始的解题的时候,想采取贪心算法来解决,也就是将放入的物品的性价比按照从高到低进行排序,然后优先放优先级高的,其次优先级低的。
 
三、代码实现(python)
复制代码
# 重量w=[5,4,3,2]
# 价值v=[6,5,4,3]
b=[]
m=int(input("请输入背包的最大重量:"))
n=int(input("请输入商品的数量:"))
for i in range(n):
a=input("请分别输入重量和价值,以空格隔开:")
a=a.split(" ")
for i in range(len(a)):
a[i]=int(a[i])
b.append(a)
print("加载初始化:",b)
for i in range(len(b)):
for j in range(i+1,len(b)):
if b[i][1]/b[i][0]<b[j][1]/b[j][0]:
b[i],b[j]=b[j],b[i]
print("性价比排序:",b)
v=0
c=[]
for i in range(len(b)):
if m-b[i][0]>0:
m=m-b[i][0]
c.append(b[i])
v+=b[i][1]
print("放入背包:",c)
print("最大价值为:",v)
复制代码
打印结果:
 
四、算法分析:
贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。一般是一维问题。
很明显,此算法在背包问题上面解答是错误的,放入[[2,3],[3,4],[5,6]]时可达到最高值13

 并没有找到最优解,推荐的算法为动态背包算法。

posted @   Mrwhite86  阅读(2030)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示