本文是学习陆老师的《python全栈工程师 - 数据结构与算法》课程的笔记,欢迎学习交流。同时感谢陆老师的精彩传授!
一、课程目标
- 什么是背包问题
- 贪心算法
- 动态规划
二、详情解读
01.什么是背包问题:
限定条件下获得最大价值
比如:你现在有一个背包,只能背1kg的物品,可以背的物品包括:
1.笔记本电脑,重0.9kg,价值8000元
2.蓝牙音箱,重0.7kg,价值3000元
3.虚拟设备,重0.3kg, 价值1500元
怎么装,可以让背包里的物品总价值最大
类似的问题 – 资源配置收益最大化
比如:七天长假,你如何用有限的时间去多玩几天最想去的地方(0-1背包问题,每一种选择只能选择一次)
比如:集装箱装船,有不同的集装箱规格,如何在总质量不超过载重的情况,尽量装满货船(完全背包问题,每一种选择可以选择多次)
02. 0-1背包问题:贪心算法求解
贪心算法求解
1.贪心算法就是不管全局,只管眼前
2.找出当前的最优解就好
3.贪心算法找到的结果不一定是最好的解
举例:去电脑商场偷电脑,背的包最多装1000克
1.笔记本电脑:重500克,价值11000元
2.音箱:重400克,价值6000元
3.ipad:重300克,价值7000元
4.手机:重200克,价值3000元
5.触摸笔:重100克,价值1000元

代码实现:
goods_list = {
'notebooks': (800, 10000),
'voicebox': (600, 6000),
'ipad': (300, 7000),
'mobile': (200, 1500),
'pencil': (100, 2000)
}
allow_weight = 1000
# 价格最大化
take_goods = []
take_weight = 0
while take_weight < allow_weight:
max_price = 0
max_price_goods = None
for goods_name, goods_nature in goods_list.items():
if goods_name in take_goods:
continue
if max_price < goods_nature[1]:
if goods_nature[0] <= allow_weight - take_weight:
max_price = goods_nature[1]
max_price_goods = goods_name
if max_price_goods:
take_goods.append(max_price_goods)
take_weight += goods_list[max_price_goods][0]
else:
break
print('按照价格最大化选择:', take_goods, take_weight)
# 重量最小化
take_goods

本文介绍了Python中解决背包问题的方法,重点讲解了0-1背包问题和动态规划的运用。通过实例展示了如何使用贪心算法和动态规划来求解在限定条件下获得最大价值的问题,如资源配置和物品选择等。
最低0.47元/天 解锁文章
393

被折叠的 条评论
为什么被折叠?



