背包问题 动态规划python_python版本背包问题的动态规划实现

经典背包问题. 背包最多只能容纳固定的空间. 在不同的空间中有几个项目可供选择. 每个项目都有不同的值. 该程序遍历每种可能的组合以选择最佳选择. 解决方案,最大程度地提高了背包中所装物品的价值. 该算法的时间复杂度是指数O(n ^ k). 使用旧的例程,计算机存储空间可以交换所消耗的时间背包问题 动态规划 python背包问题 动态规划 python,可以有效地提高程序性能并降低时间复杂度:

def fast_knapsack(w, v, i, aw, m):

global numCalls;

numCalls += 1

try:

return m[(i, aw)]

except KeyError:

if i == 0:

if w[i] < aw:

return v[i]

else:

return 0

without_i = fast_knapsack(w, v, i - 1, aw, m)

if w[i] > aw:

return without_i

with_i = fast_knapsack(w, v, i - 1, aw - w[i], m) + v[i]

res = max(without_i, with_i)

m[(i, aw)] = res

return res

def knapsack(w, v, i, aW):

global numCalls

numCalls += 1

if i == 0:

if w[i] <= aW:

return v[i]

else:

return 0

without_i = knapsack(w, v, i - 1, aW)

if w[i] > aW:

return without_i

else:

with_i = v[i] + knapsack(w, v, i - 1, aW - w[i])

return max(with_i, without_i)

if __name__ == '__main__':

# n = 10

# w = [2, 6, 5, 4]

# v = [3, 5, 4, 6]

# n = 5

# w = [5,3,2]

# v = [9,7,8]

#

n = 10

w = [2, 1, 5, 5, 3, 3, 4, 4]

v = [15, 15, 10, 10, 9, 9, 5, 5]

numCalls = 0

res = knapsack(w, v, len(w) - 1, n)

print('optimum solution: ', res)

print('call funstion times: ', numCalls)

print('')

numCalls = 0

res = fast_knapsack(w, v, len(w) - 1, n, {})

print('optimum solution: ', res)

print('call funstion times: ', numCalls)

运行结果:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-188265-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值