用python实现贪心算法

1.算法思想

1.1 目标
在所给约束内,尽可能取得最优解(最多)

1.2怎样做
1.2.1 将目标样本按照由低到高的顺序来排列
1.2.1 依次累加,直至超过约束范围
1.2.3 打印出解

2.程序实现

2.1 先将样本按照由低到高的顺序排列成一个list数据

"""
以水果为例
"""
fruit=['apple','peach','banana','none']
value=[5,4,6,10]
cost=[100,120,200,150]
#建立一个Fruit类型的数据
class Fruit(object):
      def __init__(self,name,value,cost):
          self.name=name
          self.value=value        
          self.cost=cost 
     def getvalue(self):        
          return self.value
     def getcost(self):        
          return self.cost

#按照由高到低的顺序建立目录
def buildmenu(food,value,cost):    
    menu=[]
    for i in range(len(food)):         
        menu.append (Fruit(food[i],value[i],cost[i])) 
    return sorted(menu ,key=Fruit.getvalue)

         


sorted的用法可以参考

2.2算法核心

def greedy(menu,target):
    total=0
    for i in range(len(menu)):
        if total+menu[i].value<=target:      #这是一个小技巧,避免超过约束
             total+=menu[i].value 
             print(menu[i].name,menu[i].value,menu[i].cost)
        else:         
              print(total)      
              break

2.3实例实现

testmenu=buildmenu(fruit,value,cost)
greedy(testmenu,17)

最后结果如上

3.可以改进的地方

算法可以改进,可以不用按照从低到高的顺序排列,直接计算即可。

谢谢观看,如有错误,望不吝指教。

你可能感兴趣的:(python入门)