Code前端首页关于Code前端联系我们

学习Python算法:贪心算法

terry 2年前 (2023-09-27) 阅读数 70 #数据结构与算法

贪心算法也叫贪婪算法。意思是在解决问题时,总是做出当前最好的选择。也就是说,在不考虑整体最优解的情况下,他所做的在某种意义上就是局部最优解。

贪心算法无法获得所有问题的整体最优解。关键是选择贪心策略。所选择的贪心策略必须没有影响,即某个状态的前一个过程不会影响后续状态,只会影响后续状态。与当前形势有关。 ?之前是得到一个近似解,所以贪心算法存在以下问题:

1)贪心算法得到的解不一定是最优解

2)不适合最优​​值问题

3)适用。建立数学模型来描述问题

2。将要解决的问题分成几个子问题

3。求解每个子问题,得到子问题

4的局部最优解。将子问题的局部最优解综合为原问题的解

算法求解过程是首先从目标值的某个解开始,得到可行解的元素,然后将所有的解元素a 得到可行解。 ?在超市结账时,如果需要找零,收银员希望给顾客最少数量的硬币。那么,如何求出需要找零的金额,如何求出最少的硬币数量呢? ?也可以用五个一角,也可以用一个二角,三个一角,所以我们在解决这个问题的时候可以从这几个角度去思考。

3) 代码实现

12345678910111213141516171819202122232425262728 def main(): = [0.01, 0.02 ,0.05,0.1,0.2,0.2❝,1.0] # 保存每枚硬币的面值 d_num = [] 各数量 s = ♂ [] ♂ 请进入每次更改的金额为:')。 对于范围() , len(d_num): (d_num0[ i] )) d #计算收银员有多少钱 sum = 浮动( 输入"请输入您需要的零钱:")) if sum > s: # 如果输入的总金额不超过总金额    打印“数据错误”                     = s -#如果想要使用最少数量的硬币,就必须使用所有大面额的硬币,所以从数组中面额大的元素开始开始 i = 6 同时 = 0: > =]      n =int()d[i])❀if n >= d_num[i ]: = n *#贪婪的关键步骤是动态改变总和 ​​​​​​ 打印( "已使用 %d%f 元币"](n%, ))      i -=♹❀__name_每种硬币的数量。编辑:14? 枚1.000000元币使用10.20000余和使用10.100000元币先输入每个的金额找零然后计算总金额,确定可以找零,然后进行下一步找零。为了保证找零的金额最小,就使用大面额的硬币,所以从大面额的硬币开始。如果大宗派不满意,那就往下走。该算法的关键在于sum的值是动态变化的,对变化的sum值进行判断,直到最终完成。

3.汽车加油问题

汽车加满油后可以行驶n公里。途中有几个加油站。设计一种有效的算法来指示应该停止哪些加油站加油,从而最大限度地减少沿途加油次数。对于给定的n(n = d[i] # 权限 如果部分和为大于 n,如果 54if

12345678910111213141516171819202122232425262728== '__main__ ':,则本地总和更新为当前距离  苯()

输出结果是

14

这道题我们首先要判断当油位满时每个相邻加油站之间的距离是否可以更大,然后开始迭代,使用while语句。如果 i 等于 5,则退出循环。如果循环中局部和大于n就将局部和更新为当前距离,然后数字加一,直到退出循环。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门