zoukankan      html  css  js  c++  java
  • 贪心算法

    python实现贪心算法代码如下:

    #贪心算法
    #1找零问题的贪心算法
    def change(t,n):
    #对t进行从大到小的排序
    t.sort()
    t.reverse()
    #定义t的每一个的数量
    m=[0 for _ in range(len(t))]
    for i,money in enumerate(t):
    m[i]=n // money
    n=n % money
    return m,n
    t=[100,5,20,5,1]
    print(change(t,376))

    #2背包问题(0-1背包和分数背包问题)
    #分数背包算法是贪心算法,可以得到最优解
    goods=[(60,10),(100,20),(120,30)] #每个商品价格和对应的重量
    goods.sort(key=lambda x:x[0]/x[1],reverse=True) #首先对货物的均价进行计算排序
    def fractional_backpack(goods,w):
    m=[0 for _ in range(len(goods))] #假设开始均为0
    total_value=0
    for i,(price,weight) in enumerate(goods):
    if w>=weight:
    m[i]=1
    total_value+=price
    w-=weight
    else:
    m[i]=w/weight
    total_value+=m[i]*price
    w=0
    break
    return m,total_value
    print(fractional_backpack(goods,50))

    #3数字拼接问题(贪心a+b的大小)
    a="96"
    b="87"
    #a+b if a>b else b+a
    a="128"
    b="1286"
    #a+b="1281286"
    #b+a="1286128"
    #a+b<b+a
    a="728"
    b="7286"
    #a+b>b+a
    li=[32,94,128,1286,6,71]
    from functools import cmp_to_key #导入cmp函数
    def xy_cmp(x,y):
    if x+y<y+x:
    return 1
    elif x+y>y+x:
    return -1
    else:
    return 0
    def number_join(li):
    li=list(map(str,li)) #将list各个元素进行字符串化
    li.sort(key=cmp_to_key(xy_cmp))
    return "".join(li)
    print(number_join(li))

    #4活动选择问题(贪心最早结束的活动)
    activity=[(1,4),(3,5),(0,6),(5,7),(3,9),(5,9),(6,10),(8,11),(8,12),(2,14),(12,16)]
    activity.sort(key=lambda x:x[1]) #先要按照结束时间进行排序
    print(activity)
    def activity_selection(a): #a为场地可以使用的所以活动
    res=[a[0]] #最先结束的活动
    for i in range(1,len(a)):
    if a[i][0]>=res[-1][1]: #如果当前活动开始时间大于最后一个入选活动的结束时间,则时间不冲突
    res.append(a[i])
    return res
    print(activity_selection(activity))

    li=[2,3,1,2,5,6,7,8]
    def cmp(x,y):
    if x>y:
    return 1
    elif x<y:
    return -1
    else:
    return 0
    li.sort(key=cmp_to_key(cmp))
    print(li)#顺序排列

  • 相关阅读:
    前言
    echarts踩坑---容器高度自适应
    vue中刷新页面时去闪烁,提升体验方法
    2018.11.7
    07-sel-express 框架快速搭建案例
    第三方包 vue-resource
    zepto.js-定制zepto步骤
    CSS-单位em 和 rem
    ES6-个人学习大纲
    响应式布局
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12454938.html
Copyright © 2011-2022 走看看