(python)背包问题递归算法、动态规划算法比较实验

(python)背包问题递归算法、动态规划算法比较实验

实验题目

背包问题递归算法、动态规划算法比较实验

问题描述:

给定 n 件物品,物品的重量为 w[i],物品的价值为 v[i]。现挑选物品放入背包中,假定背包能承受的最大重量为 c,问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?

实验要求

画出运行时间与n变化曲线对比图,并分析原因

实验目的

1、掌握递归算法与动态规划算法思想。
2、了解什么是01背包问题,并使用递归算法及动态规划算法解决01背包问题。
3、比较递归算法与动态规划算法解决01背包问题不同n值所耗费的时间。

实验步骤

1、递归算法解决01背包问题

#sum:选择前i件物品的价值之和
#now_wight:第i件物品的重量
def rec_bag(sum, now_wight, i, j = 0):
    global maxValue
    if now_wight > c:#超出重量 则回退
        return
    if i==n:   #已经完成n件物品的选择
        if sum > maxValue: #更新最大价值
            maxValue = sum
        return
    rec_bag(sum+v[i], now_wight+w[i],i+1,j = 0)#选这件物品
    rec_bag(sum,now_wight,i+1, j = 0)  #不选这件物品

2、动态规划算法解决01背包问题

#动态规划解决01背包问题
# n:物品的数量
# c:书包能承受的重量
# w:每个物品的重量
# v:每个物品的价值
def bag(n,c,w,v):
    # 置零,表示初始状态
    value = [[0 for j in range(c + 1)] for i in range(n + 1)]
    for j in range(c+1):
        value[0][j]=0
    for i in range(1,n+1):
        for j in range(1,c+1):
            value[i][j]=value[i-1][j]
            # 背包总容量够放当前物体,遍历前一个状态考虑是否置换
            if j>=w[i-1] and value[i][j]<value[i-1][j-w[i-1]]+v[i-1]:
                value[i][j]=value[i-1][j-w[i-1]]+v[i-1]
    return value

3、统计函数运行时间

#函数运算时间
def time_Counter(func,n,c,w,v):
    time_start = time.time()
    func(n,c,w,v)
    time_end = time.time()
    return time_end-time_start

4、可视化显示实验结果

def ShowTimes(N,time1, time2):
    #设置汉字格式
    font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
    plt.figure
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值