python 版 动态规划 背包问题算法
2013-07-08 14:45
906 查看
演示示例
代码
version版本修改增加优化重叠子问题的解决
计算结果
代码
version版本修改增加优化重叠子问题的解决
numCount = 0 #version 1 def MaxVal1(w, v, index, last): """ 得到最大价值 w为widght v为value index为索引 last为剩余重量 """ global numCount numCount = numCount + 1 #最底部 if index == 0: #是否可以装入 if w[index] <= last: return v[index] else: return 0 #寻找可以装入的分支 without_l = MaxVal1(w, v, index - 1, last) #如果当前的分支大于约束 #返回历史查找的最大值 if w[index] > last: return without_l else: #当前分支加入背包,剪掉背包剩余重量,继续寻找 with_l = v[index] + MaxVal1(w, v , index - 1, last - w[index]) #比较最大值 return max(with_l , without_l) #version 2 def MaxVal2(memo , w, v, index, last): """ 得到最大价值 w为widght v为value index为索引 last为剩余重量 """ global numCount numCount = numCount + 1 try: #以往是否计算过分支,如果计算过,直接返回分支的结果 return memo[(index , last)] except: #最底部 if index == 0: #是否可以装入 if w[index] <= last: return v[index] else: return 0 #寻找可以装入的分支 without_l = MaxVal2(memo , w, v, index - 1, last) #如果当前的分支大于约束 #返回历史查找的最大值 if w[index] > last: return without_l else: #当前分支加入背包,剪掉背包剩余重量,继续寻找 with_l = v[index] + MaxVal2(memo , w, v , index - 1, last - w[index]) #比较最大值 maxvalue = max(with_l , without_l) #存储 memo[(index , last)] = maxvalue return maxvalue w = [5, 5, 1, 9 , 10 ,3, 8, 6, 4 , 2, 5, 5, 1, 9 , 10 ,3, 8, 6, 4 , 2] v = [7, 7, 6, 5, 4, 8, 11, 4, 2, 3,7, 7, 6, 5, 4, 8, 11, 4, 2, 3] print MaxVal1(w, v, len(w) - 1, 35) , "caculate count : ", numCount numCount = 0 memo = {} print MaxVal2(memo , w, v, len(w) - 1, 35) , "caculate count : ", numCount
计算结果
66 caculate count : 188174 66 caculate count : 1134
相关文章推荐
- 算法导论16.2-2--动态规划(0-1背包问题)
- 算法导论16.2-2--动态规划(0-1背包问题)
- 实际问题的算法抽象——动态规划中的01背包问题
- python - 动态规划 - 0-1背包问题
- 动态规划 - 0-1背包问题的算法优化
- 计算机算法--动态规划0-1背包问题
- 算法导论16.2-2--动态规划(0-1背包问题)
- 01背包问题python(使用递归和动态规划)
- 【算法设计与分析】7、0/1背包问题,动态规划
- 算法java实现--动态规划--0-1背包问题
- Python动态规划计算0-1背包问题的最优值
- [算法]动态规划之背包问题
- 算法导论--动态规划(0-1背包问题)
- 【算法数据结构Java实现】Java实现动态规划(背包问题)
- 0/1背包问题算法的python实现
- 【算法系列-5】动态规划-背包问题
- 0019算法笔记——【动态规划】0-1背包问题
- python -- 0/1背包问题(动态规划-dict)
- Python中运用动态规划解决背包问题
- python -- 0/1背包问题(动态规划-list)