用贪心算法写出01背包问题基于python代码
时间: 2024-02-05 10:04:23 浏览: 84
好的,下面是用贪心算法解决01背包问题的python代码实现:
```python
# 物品类
class Item:
def __init__(self, weight, value):
self.weight = weight
self.value = value
# 按照单位重量的价值从大到小排序
def cmp(item):
return item.value/item.weight
# 01背包问题贪心算法
def knapsack_greedy(items, W):
items.sort(key=cmp, reverse=True) # 按照单位重量的价值从大到小排序
total_value = 0 # 总价值
for item in items:
if item.weight <= W: # 若物品可以全部放入背包
total_value += item.value
W -= item.weight
else: # 若物品放不完,则将部分物品放入背包中
total_value += item.value * W / item.weight
break
return total_value
# 测试代码
if __name__ == '__main__':
W = 50 # 背包容量
items = [Item(10, 60), Item(20, 100), Item(30, 120)] # 物品重量和价值
max_value = knapsack_greedy(items, W) # 计算最大价值
print("最大价值为:", max_value)
```
以上代码中,我们定义了一个物品类,包含物品的重量和价值,然后实现了一个按照单位重量的价值从大到小排序的比较函数,最后实现了一个贪心算法的函数,计算出最大价值。最后在 main 函数中进行测试,输入背包容量和物品的重量和价值,输出最大价值。
阅读全文