希赛考试网
首页 > 软考 > 软件设计师

贪心算法的实例

希赛网 2024-02-24 14:10:13

贪心算法(Greedy Algorithm)是一种常用的算法思想,其基本思想是在每一步选择中都采取当前状态下最优的选择(贪心),从而希望能够导致全局最优解。下面将以几个实例为例,从多个角度分析贪心算法。

1. 零钱找零

面对一个给定的以及一定数量的纸币和硬币,给出一个总数,问如何使用这些钞票硬币,使得总数恰好等于所需的总数,并且要求使用的钞票硬币数量最少。

贪心策略:选择一个钞票硬币时,选择最大的金额,并且保证所选金额小于所需总数。并继续选择下一个金额最大的,直到所需总数为0为止。

比如,当我们需要找零41元时,我们可以采取以下策略:

选择最大面额的硬币25元,需找15元;

选择次大的面额的硬币10元,需找5元;

选择最小的硬币1元,需找4元;

此时,所用硬币数最少,共使用3个硬币。

此时,贪心算法得到了最优解,但是并不是所有情况下的结果就一定是最优解。

2. 活动安排问题

有许多需要在同一时间段使用同一场地的活动,给出每个活动的开始时间和结束时间,要求在同一时刻只能进行一个活动,问如何安排活动,能够尽可能多的活动得到它们的时间段。

贪心策略:按照活动结束时间的早晚排序,先选择结束时间最早的活动,并将该活动的结束时间设为当前时间点。然后,继续选择下一场能够在当前时间点开始的活动。

举个例子,我们有以下6个活动:

| 活动 | 开始时间 | 结束时间 |

|------|----------|----------|

| A | 1 | 4 |

| B | 3 | 5 |

| C | 0 | 6 |

| D | 5 | 7 |

| E | 3 | 8 |

| F | 5 | 9 |

按照结束时间从早到晚的顺序排序,分别为A、C、B、E、D、F。贪心算法的策略如下:

选择A活动,当前时间设为4;

选择C活动,当前时间设为6;

不能选择B活动,因为与C活动时间有重叠;

选择E活动,当前时间设为8;

不能选择D活动,与E活动时间有重叠;

选择F活动,当前时间设为9;

共选择4个活动。

同样的,在某些情况下,贪心算法并不总是能够得到最优解。

3. 背包问题

有一个可以承载重量为W的背包,有n个物品,每个物品的重量为wi,价值为vi,要求在保证不超过背包承载重量的前提下,选取一些物品,使得这些物品的价值之和最大。

贪心策略:按照每个物品的单位重量价值(vi/wi)从大到小排列,选择价值单位最大的物品加入背包中,直到完全不能再加入新的物品为止。

例如,有5个物品:装A、装B、装C、装D、装E,重量分别为2、2、6、5、4,价值分别为6、3、5、4、6,而背包的承重量W为10。我们将物品按照单位重量价值从高到低排序,并按照以上贪心策略进行选择,得到以下的结果:

选择装E,价值=6,重量=4,剩余重量=6;

选择装C,价值=5,重量=6,剩余重量=0;

共选择2个装备,总价值=11。

需要注意的是,在背包问题中,贪心算法依然并不总是能得到最优解。

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划