greedy algorithm demo(knapsack problem)
2015-05-29 07:30
501 查看
#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 value(item): return item.getValue() def weightInverse(item): return 1.0/item.getWeight() def density(item): return item.getValue()/item.getWeight() def buildItems(): names = ['clock', 'painting', 'radio', 'vase', 'book', 'computer'] values = [175,90,20,50,10,200] weights = [10,9,4,2,1,20] Items = [] for i in range(len(values)): Items.append(Item(names[i], values[i], weights[i])) return Items def greedy(items, maxWeight, keyFunction): """Assumes Items a list, maxWeight >= 0, keyFunction maps elements of Items to floats""" itemsCopy = sorted(items, key=keyFunction, reverse = True) result = [] totalValue = 0.0 totalWeight = 0.0 for i in range(len(itemsCopy)): if (totalWeight + itemsCopy[i].getWeight()) <= maxWeight: result.append(itemsCopy[i]) totalWeight += itemsCopy[i].getWeight() totalValue += itemsCopy[i].getValue() return (result, totalValue) def testGreedy(items, constraint, keyFunction): taken, val = greedy(items, constraint, keyFunction) print 'Total value of items taken = ', val for item in taken: print ' ', item def testGreedys(maxWeight = 20): items = buildItems() print 'Use greedy by value to fill knapsack of size', maxWeight testGreedy(items, maxWeight, value) print '\nUse greedy by weight to fill knapsack of size', maxWeight testGreedy(items, maxWeight, weightInverse) print '\nUse greedy by density to fill knapsack of size', maxWeight testGreedy(items, maxWeight, density)
相关文章推荐
- Google IO 2015
- 不用额外空间判断一个数是否是回文形式
- sales calls for good
- django
- VIEWGOOD(远古)流媒体在企事业单位中的应用
- VIEWGOOD(远古)为您介绍直播时移技术
- 不用装软件-不用任何插件-在PC上下载Google play的apk
- Googlebuf Window编译
- Google maps api demo 2
- Google maps api demo
- virgo虚拟桌面
- Google I/O 2015 倒计时
- 【转】golang的channel的几种用法
- go web 第一个程序例子
- Django学习___静态资源访问
- Google maps API
- GoF设计模式之适配器模式
- Django学习____视图
- A* Search Algorithm Module
- go语言学习笔记---非入侵式接口设计探究