贪心算法

【概述】

1、贪心选择:
  所谓贪心选择是指应用同一规则,将原问题变为一个相似的但规模更小的子问题,而后的每一步都是当前看似最佳的选择,且这种选择只依赖于已做出的选择,不依赖未做出的选择。
2、最优子结构:
  执行算法时,每一次得到的结果虽然都是当前问题的最优解(即局部最优解),但只有满足全局最优解包含局部最优解是,才能保证最终得到的结果是最优解。
  
总结而言,贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略。且贪心策略必须具备无后效性

【题型】

1、最优装载问题 \ 最优选择问题
【问题】
给n个物品,第 i 个物品重量为 w i w_i wi ,选择尽量多的物品,使得总重量不超过C。
【思路】
只关心物品的数量,没有关注价值之类的方面。把物品重量从小到大排序往里放,直到放不下为止。
【例题】
两种排队打水问题等等。

2、部分背包问题
【问题】
有n个物品,第 i 个物品的重量为 w i w_i wi,价值为 v i v_i vi ,在总重量不超过C的情况下,让总价值尽量高,每一个物品可以只取走一部分,价值和重量按比例计算。
【思路】
排性价比,性价比高的先拿。需要注意的是,由于每个物品只能选择一部分,因此一定可以让总重量恰好为 C,而且除了最后一个物品以外,其他物品要么不选要么全选。

3、乘船问题
【问题】
有n个人,第i个人重量为 w i w_i wi。每艘船的载重量均为C,最多可乘两个人,现在想用最少的船将所有人运走,问船的数量。
【思路】
最轻的人和最重的人配对。
将所有人按重量从小到大排序,依次考虑最轻的人 w i w_i wi,如果每个人都不能与他一起乘船,那么就只能每个人都乘一条船,否则,其能选择能与他一起乘的人中重量最终的一个 w j w_j wj,这样使得眼前的浪费最少。

4、选择不相交区间问题
【问题】
给定n个开区间[ a i a_i ai b i b_i bi],选择尽量多个区间,使得这些区间两两没有公共点。
【思路】
首先,按照结束时间 b 1 b_1 b1<= b 2 b_2 b2…… <= b n b_n bn 的顺序排序,依次考虑各个活动,如果没有和已经选择的活动冲突,就选,否则就不选。
【例题】
活动安排(信息学奥赛一本通T1422)
线段(信息学奥赛一本通T1429)

5、区间选点问题 
【问题】
给定n个闭区间[ a i a_i ai b i b_i bi],在数轴上选尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)
【思路】
首先按照区间右端点从小到大排序,然后从区间 1 到区间 n 进行选择,对于当前区间,若集合中的数不能覆盖他,则将集合末尾的数加入集合
【例题】
种树(信息学奥赛一本通T1423)

6、区间覆盖问题
【问题】
给n个闭区间[ a i a_i ai b i b_i bi],选择尽量少的区间覆盖一条指定的线段区间 [s,t] 。
【思路】
将所有的区间按左端点从小到大排序,依次处理每个区间,每次选择覆盖点 s 的区间中右端点坐标最大的一个,并将 s 更新为该区间的右端点坐标,直到选择的区间包含 t 为止。
【例题】
喷水装置(信息学奥赛一本通T1424)
7、流水作业调度问题
【问题】
有n个作业要在两台机器 M 1 M_1 M1 M 2 M_2 M2组成的流水线上完成加工。每个作业 i 都必须先花时间 a i a_i ai M 1 M_1 M1上加工,然后花时间 b i b_i bi M 2 M_2 M2上加工。
确定n个作业的加工顺序,使得从作业1在机器 M 1 M_1 M1上加工开始到作业n在机器 M 2 M_2 M2上加工为止所用的总时间最短。
【思路】
直观上,最优调度一定让 M 1 M_1 M1没有空闲, M 2 M_2 M2的空闲时间尽量短。
Johnson算法:设 N 1 N_1 N1为 a < b 的作业集合, N 2 N_2 N2为 a >= b的作业集合,将 N 1 N_1 N1的作业按a非减序排序, N 2 N_2 N2中的作业按照b的非增序排序,则 N 1 N_1 N1作业接 N 2 N_2 N2作业构成最优排序。
【例题】
加工生产调度(信息学奥赛一本通T1452)
8、带限期与罚款的单位时间任务调度
【问题】
n 个任务,每个任务需要一个单位时间执行,任务 i 的截止时间 d i d_i di 表示任务 i 在时间 d i d_i di 前必须完成,误时罚款 w i w_i wi 表示任务 i 若未在 d i d_i di 前完成,导致 w i w_i wi 的罚款,确定所有任务的执行顺序使得罚款最少
【思路】
要使罚款最少,就尽量完成 w[i] 值较大的任务,此时将任务按 w[i] 从大到小排序,按排好的顺序对任务进行安排:使得处理任务 i 的时间在 d[i] 之内又尽量靠后,如果 d[i] 时间之内的时间都已排满,就放弃处理该任务
9、其他类型

因为题目还没有做多少,所以该博客还会后续进行补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅梦曾倾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值