DP(Dynamic Programming) demo: optimal substructure(recursion) + overlapping structure(memo)
来源:互联网 发布:java银行系统开发 编辑:程序博客网 时间:2024/06/05 16:30
#quote from 'introduction to computation and programming using python,# revised edition, MIT'class Item(object): def __init__(self, n, v, w): self.name = n self.value = float(v) self.weight = float(w) def getName(self): return self.name def getValue(self): return self.value def getWeight(self): return self.weight def __str__(self): result = '<' + self.name + ', ' + str(self.value)\ + ', ' + str(self.weight) + '>' return result def fastMaxVal(toConsider, avail, memo = {}): """Asumes toConsider a list of items, avail a weight memo used only by recursive calls Returns a tuple of the total weight of a solution to the 0/1 knapsack problem and the items of that solution""" if (len(toConsider), avail) in memo: result = memo[(len(toConsider), avail)] elif toConsider == [] or avail == 0: result = (0, ()) elif toConsider[0].getWeight() > avail: #Explore right branch only result = fastMaxVal(toConsider[1:], avail, memo) else: nextItem = toConsider[0] #Explore left branch withVal, withToTake =\ fastMaxVal(toConsider[1:], avail - nextItem.getWeight(), memo) withVal += nextItem.getValue() #Explore right branch withoutVal, withoutToTake = fastMaxVal(toConsider[1:], avail, memo) #Choose better branch if withVal > withoutVal: result = (withVal, withToTake + (nextItem,)) else: result = (withoutVal, withoutToTake) memo[(len(toConsider), avail)] = result return result def smallTest(): names = ['a', 'b', 'c', 'd'] vals = [6, 7, 8, 9] weights = [3, 3, 2, 5] Items = [] for i in range(len(vals)): Items.append(Item(names[i], vals[i], weights[i])) val, taken = fastMaxVal(Items, 5) for item in taken: print item print 'Total value of items taken =', val
0 0
- DP(Dynamic Programming) demo: optimal substructure(recursion) + overlapping structure(memo)
- Dynamic Programming(DP) (Optimal substructure + overlapping subproblems(memorization))DEMO
- Optimal Substructure DEMO(without memorization: overlapping subproblems)
- Recursion & Dynamic Programming
- RNA secondary structure(Dynamic Programming)
- [Dynamic Programming]Recursion/Non-recursion to find the max number
- [Dynamic Programming]Example 3.1 Recursion Programming - About the Stairs
- DP (Dynamic programming)
- USACO2.2 Data Structure&Dynamic Programming&读书笔记
- Cranking the Coding Interview: Recursion and Dynamic Programming
- Dynamic Programming(DP动态规划)
- Dynamic Programming(DP)---动态规划
- Assignment 4: Dynamic Programming (DP)
- hdu 4223 Dynamic Programming? (dp)
- 动态规划(DP dynamic programming)
- DP 动态规划Dynamic programming
- 最优子结构(Optimal Substructure)
- 最优子结构(optimal substructure)
- Markdown 文本格式
- 重写listview,横向滑动出现删除按钮,点击按钮删除item
- eclipse内存溢出问题
- Mac OS下关闭本地TimeMachine备份节省磁盘空间
- IOS CoreText --- 基本用法
- DP(Dynamic Programming) demo: optimal substructure(recursion) + overlapping structure(memo)
- 每日一题30:拓补排序
- IOS CoreText --- 段落样子CTParagraphStyle
- struts2 文件上传与下载原理
- sql语句小总结
- IOS CoreText --- 行 CTLineRef
- 阻塞赋值和非阻塞赋值
- 利用myeclipse 生成Hibernate Mapping文件时出现No entries available的解决办法
- IOS CoreText --- 图文混排