greedy algorithm DEMO
来源:互联网 发布:阿里云学生服务器 编辑:程序博客网 时间:2024/06/07 23:06
# 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 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 Itemsdef 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) testGreedys()%run "C:\Users\Administrator\test.py"Use greedy by value to fill knapsack of size 20Total value of items taken = 200.0 <computer, 200.0, 20.0>Use greedy by weight to fill knapsack of size 20Total value of items taken = 170.0 <book, 10.0, 1.0> <vase, 50.0, 2.0> <radio, 20.0, 4.0> <painting, 90.0, 9.0>Use greedy by density to fill knapsack of size 20Total value of items taken = 255.0 <vase, 50.0, 2.0> <clock, 175.0, 10.0> <book, 10.0, 1.0> <radio, 20.0, 4.0>
0 0
- greedy algorithm DEMO
- greedy algorithm demo(knapsack problem)
- greedy algorithm
- Greedy algorithm
- hdu 1052 (greedy algorithm)
- Section 1.3 Greedy Algorithm
- Greedy Algorithm--Algorithms
- 贪心算法(Greedy algorithm)
- 贪心算法(greedy algorithm)
- Wooden Sticks(Greedy Algorithm)
- USACO Section 1.3 Greedy Algorithm
- usaco 1.3.1 Greedy Algorithm
- 贪心算法(greedy algorithm)
- Kruskal based on Greedy Algorithm
- Greedy Algorithm (To be updated)
- USACO 之 Section 1.3 Greedy Algorithm
- 贪心算法(GREEDY ALGORITHM)证明实践
- Section 1.2 Translate:USACO/Greedy Algorithm
- Merge Intervals
- Leetcode 18 4Sum
- 8款样式新颖的jQueryCSS3网页菜单
- CentOS 7 运行级别的切换
- poj 2386 Lake Counting(深搜)
- greedy algorithm DEMO
- mac eclipse实用快捷键总结
- Ext.Msg.QUESTION、Ext.Msg.WARNING---ExtJS学习------Ext.Msg.show()学习
- 【Java并发编程实战】-----线程基本概念
- C语言缓冲区(缓存)详解
- MyBatis学习系列六:新增和更新
- C语言常见函数重写
- poj 3468 A Simple Problem with Integers(线段树、延迟更新)
- Unique Paths II