对贪心算法几点认识和几道例题

本文介绍了贪心算法的基本思想及应用,并通过四个典型问题详细解析了贪心算法的设计思路与实现方法,包括货币选择问题、区间调度问题、多机调度问题和区间覆盖问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于贪心算法的几点总结:
1.贪心算法的思路是将一个大问题,分解成若干个部分,对每一部分求最优解,以此得出整体的最优解。
2.贪心算法求解的是每一步的最优解,所得出的不一定是整体意义上的最优解。
3.使用贪心算法求解,一般需要用到结构体。使用结构体定义变量处理起来更加方便。
4.对于贪心算法,我们一般需要自定义排序顺序,将所有的元素有序排列起来,然后从前往后处理。当一遍循环结束后,即可求出所求该问题的最优解。
5.贪心算法在有些时候处理问题较为方便,它一次循环就可求出所求结果,花费时间少,占用的空间少;但是在某些问题中,局部的最优解不等于整体的最优解,对这类问题,贪心算法将不适用,这时,我们要用到一种新的算法,即DP(动态规划)。
一、货币选择问题
题目:别有1,5,10,50,100元,分别有a,b,c,d张纸币。问若要支付k元,求所需最少纸币数?
方法:先从面值大的开始开始计算,能用100的就尽量用100,再依次用50,10,5,1。
例如:187=100*1+50*1+10*3+5*1+1*2
一共需要8张。
二、区间调度问题
题目:
有n项工作,每项工作分别在Si开始,Ti结束。对每项工作,你都可以选择与否,若选择参加,则必须至始至终参加全程参与,且参与工作的时间段不能有重叠。求所能参加的最大的完整的工作数。
方法:定义每项工作的结构体,将所有结构体按结束时间从小到大排序,若结束时间相同,则按照开始时间从大到小排序。然后从第一个开始选择得到的工作数最多的。
三、多机调度问题
题目:
n个作业组成的作业集,可由m台相同机器加工处理。要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。作业不能拆分成更小的子作业;每个作业均可在任何一台机器上加工处理。
方法:
这个问题是NP完全问题,还没有有效的解法(求最优解),但是可以用贪心选择策略设计出较好的近似算法(求次优解)
当n<=m时,只要将作业时间区间分配给作业即可;当n>m时,首先将n个作业从大到小排序,然后依此顺序将作业分配给空闲的处理机。即按照时间从大到小依次处理所花费时间最短。
四、区间覆盖问题
题目 :
假设海岸线是一条无限延伸的直线。陆地在海岸线的一侧,而海洋在另一侧。每一个小的岛屿是海洋上的一个点。雷达坐落于海岸线上,只能覆盖d距离,所以如果小岛能够被覆盖到的话,它们之间的距离最多为d。题目要求计算出能够覆盖给出的所有岛屿的最少雷达数目。

在这里插入图片描述
方法:以每个小岛为中心,做半径为d的圆,计算出它在x轴上上覆盖的长度。对于第一个需要一个雷达,如果两个区间相交而不重合,我们什么都不需要做;如果一个区间完全包含于另外一个区间,我们需要更新区间的右端点;如果两个区间不相交,我们需要增加点并更新右端点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值