使用python实现一个贪心算法

  介绍

使用python实现一个贪心算法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

<强>思想

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件,若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。

<强>步骤

    <李>遍历初始集合X中的备选元素 <李>利用贪心策略在X中确定一个元素,并将其加入到可行解年代中李 <>李得到可行解年代李

使用python实现一个贪心算法

p即为贪心策略,用来选择符合条件的元素。


假设某国硬币面值有1、5、10、25100元五种面额,若店员为顾客找零时,需要给顾客找零=36元,求硬币数最少的情况。

使用python实现一个贪心算法

这里我们的贪心策略为:

先找到最接近一个的值,然后对一个进行更新,然后进行循环。

<强>代码实现

 def shortNum(一个):
  硬币=(1、5、10、25100)
  出=[]
  硬币硬币=[::1)
  
  我的金币:
  num=//我
  出=+[我]* num=a-num *我
  如果a<=0:
  打破
  返回了
  一个=36
  print (shortNum (a)) 


<强>问题描述:

输入为任务集合X=(r1, r2, r3,…rn),每个任务ri,都对应着一个起始时间ai与结束时间bi

要求输出为最多的相容的任务集。

使用python实现一个贪心算法

,如上图,r1与r2相容,r3与r1和r2都不相容。

那么这里的贪心策略我们可以设为:

    <李>先将结束时间最短的任务加入到年代中,李 <李>再从剩下的任务的任务中选择结束时间最短的,且判断与年代集合中的任务是否相容李 <李>若不相容,则换下一个时间最短的任务,并进行比较李 <>李循环,直至X为空。

<强>代码实现

 #任务规划
  从进口OrderedDict集合
  任务=OrderedDict ()
  任务(& # 39;r1 # 39;]=[0, 4]
  任务(& # 39;r2 # 39;]=[5、8]
  任务(& # 39;r3 # 39;]=[10、13]
  任务(& # 39;r4 # 39;]=[15、18]
  任务(& # 39;r5 # 39;]=[7、11]
  任务(& # 39;r6 # 39;]=[2,6]
  任务(& # 39;r7 # 39;]=[2,6]
  任务(& # 39;r8 # 39;]=[2,6]
  任务(& # 39;r9机型# 39;]=(12、16)
  任务(& # 39;r10 # 39;]=(12、16)
  任务(& # 39;r11 # 39;]=(12、16)
  任务(& # 39;r12 # 39;]=[0, 3]
  
  
  listTask=列表(task.items ())
  #根据bi进行排序,结束时间早的在前面(冒泡排序)
  因为我在范围(len (listTask) 1):
  j的范围(len (listTask)我):
  如果listTask [j][1][1]比;listTask [j + 1] [1] [1]:
  listTask [j], listTask [j + 1]=listTask [j + 1], listTask [j]
  打印(listTask)
  出=[]
  out.append (listTask.pop (0))
  def isValid(临时):
  k范围内(len ()):
  如果临时[1][0]& lt;从[k] [1] [1]:
  #相交
  返回假
  还真
  
  j的范围(len (listTask)):
  temp=listTask.pop (0)
  #判断是否相交
  #相交则继续
  #不相交则out.append(临时)
  k范围内(len ()):
  如果isValid(临时):
  out.append(临时)
  其他:继续语句可以不写
  其他:
  继续
  print () 

看完上述内容,你们掌握使用python实现一个贪心算法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

使用python实现一个贪心算法