Optimal Substructure DEMO(without memorization: overlapping subproblems)
2015-07-26 13:18
399 查看
# quote from 'introduction to computation and programming # using Python, revised, MIT press 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 maxVal(toConsider, avail): """Assumes toConsider a list of items, avail a weight Returns a tuple of the total weight of a solution to the 0/1 knapsack problem and the items of that solution""" #simple case if toConsider == [] or avail == 0: result = (0, ()) #recursive decomposition elif toConsider[0].getWeight() > avail: #Explore right branch only result = maxVal(toConsider[1:], avail) else: nextItem = toConsider[0] #Explore left branch withVal, withToTake = maxVal(toConsider[1:], avail - nextItem.getWeight()) withVal += nextItem.getValue() #Explore right branch withoutVal, withoutToTake = maxVal(toConsider[1:], avail) #Choose better branch if withVal > withoutVal: result = (withVal, withToTake + (nextItem,)) else: result = (withoutVal, withoutToTake) 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 = maxVal(Items, 5) for item in taken: print item print 'Total value of items taken =', val smallTest()
%run "C:\Users\Administrator\test.py" <c, 8.0, 2.0> <b, 7.0, 3.0> Total value of items taken = 15.0
相关文章推荐
- Dynamic Programming(DP) (Optimal substructure + overlapping subproblems(memorization))DEMO
- Android基础入门教程——3.8 Gestures(手势)
- Android工程测试
- Android 设计模式学习之工厂模式
- android.app.PendingIntent
- Unity中的摄像机camera的depth属性与Render Queue的区别
- Swift学习笔记(二)——常量与变量
- Android清除缓存功能来实现
- 微信公众平台开发教程新手解惑40则
- Android百分比布局支持库 com.android.support:percent
- 弹框 IOS 7 IOS 8
- Android+NDK+OpenGLES开发环境配置
- ubuntu android studio ADB问题
- iOS 数据存储 plist文件存储
- 深入浅出RxJava四-在Android中使用响应式编程
- Cocos2dx_世界坐标和模型坐标
- Android常用Uri
- Android中的消息通知Toast和Notification
- 开始iOS 7中自动布局教程(一)
- Android Studio导入项目