算法分析——第七周:贪心法

本文深入探讨了贪心算法,包括最优活动集的解决策略,按照活动截止时间排序选择最大相容活动集;最大装载问题的轻者优先解法,通过数学归纳法证明其最优性;以及最小延迟调度问题,证明了按要求完成时间排序的策略保证了最大延迟时间最小。此外,还讨论了币值问题的解决方案,强调了单位价值重量轻的货币优先原则。

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

贪心算法

贪心法的证明方法:
第一数学归纳法和第二数学归纳法:
在这里插入图片描述
交换论证法:
在这里插入图片描述

最优活动集

输入:S = {1, 2, … , n} 为n 项活动的集合, si , fi 分别为活动 i 的开始和结束时间且活动i与j相容 si>fj 或sj<fi .
求:最大的两两相容的活动集 A
解法:贪心法,按活动截止时间排序后从最早开始时间出发,获得完成后选择下一个最近开始时间获得。
在这里插入图片描述
完成时间:time=f(j)
时间复杂度:O(nlogn)+O(n)

证明:
归纳基础:若只有一个活动,则最优活动集合一定是结束时间最小活动
设最优集为A,此时将A的第一个活动用 按结束时间排序后的第一个活动代替得到活动集合A‘。
因为A’成立也活动个数等于A,所以A‘也是最优活动集
在这里插入图片描述
归纳步骤:假设对挑选的K个为真,则按此方法【结束时间排序】的挑选的第K+1活动也是最优活动
~
在这里插入图片描述
首先明白此时活动可按如上划分
i1-ik:已经选出的k个最优活动解
待选集S’:符合条件的活动集合【即待选集中所有活动的开始时间>f(ik)即最晚结束时间】
不相容元素集:不符合条件的活动集合【即集合所有活动的开始时间<f(ik)即最晚结束时间】
A:最优活动集=(i1-ik)+B
B:最优活动集在待选集的部分
其实此时我们可以这样想,就把集合拆分为两部分,一部分是A,另一部分是待选集S’。则此时根据归纳基础,S’中的第一个最优秀活动即最晚结束时间最小的活动
但要证明两点:
1:B是待选集S’的最优集合
如果B不是最优集合,说明要更优集合B’ B’>B
但此时(B’+i1–ik)>A,与A是最优集合矛盾,所以B是最优集合
可能会有疑问,如果B’+i1–ik不满足相容呢?其实S’已经是待选集合,里面的元素一定是和i1-ik相容的
2:存在含有S’最小结束时间的最优几何B2
按照归纳基础的替换思想,容易证明

综上,归纳推论得证。
要明白一点,一定存在最优集合含有最小结束时间,但是不一定所有最优几何都含有最小结束时间

最大装载问题

在这里插入图片描述
解法:轻者优先
归纳基础:只有一个箱子,则最优装载是最轻箱子
归纳步骤: 如果对n个箱子能找到最优装载,则对n+1个箱子也能找到最优装载
将n+1个箱子按照重量排序得到N{1,2,3,4,5—n+1}
这里要注意和前面的最优集合的区别。前面的是按照结束时间挑选的k=1和k个【活动都是很多个】,而这里是n=1个和n个箱子【类比于活动的箱子是1个或者n个】在这里插入图片描述
证明I是关于输入N的最优解:
首先已经知道I’是N’{2,3,4,5,6-n+1}的最优解【因为n个箱子的最优解是归纳步骤的假设部分】
假设I不是输入N{1,2,3—n+1}的最优解,则存在I2>I
将I2去掉{物品1}【如果I2不包含物品1,则用物品1替换掉I2的第一个物品的得到I3I3是成立的同时I3=I2】,此时{I2-物品1}>I’,但是前提I’已经是最优解,所以矛盾。则I是关于输入N的最优解

最小延迟调度【最大延迟达到最小的调度】

在这里插入图片描述
解法:将客户按要求完成时间从小到大进行排序,依次完成
在这里插入图片描述
引理:
1:如果多个客户存在相同的要求完成时间d,则这些任务存在相同的最大延迟时间
证明:因为相同要求完成时间d,所以肯定是连续排列(中间无其他任务)。
则若time1时刻开始,会进行到time2=time1+t1±-tn(n个相同要求完成时间的调度时间),则最大延迟时间即为time2-d,无论顺序【因为执行时间和相同】

2:如果最优解存在相邻逆序,交换后仍是最优解
证明:若f1是最优解,存在相邻逆序(i,i+1)这是两个客户或者说任务则交换后,两者的最大延迟分别是【从时刻s开始执行】
d(i)>d(i+1)
对于f1:
i的延迟:s+t(i)-d(i)
i+1的延迟:s+t(i)+t(i+1)-d(i+1)
s+t(i)+t(i+1)-d(i+1)
对于f2:
i的延迟:s+t(i)+t(i+1)-d(i)
i+1的延迟:s+t(i+1)-d(i+1)
s+t(i)+t(i+1)-d(i)
因为d(i)>d(i+1) 所以delay(f2)<delay(f1)
所以仍是最优解【其实交换后的延迟时间是小于或者等于交换前的,但是因为交换前也是最优解,所以交换后仍是最优解】
其实已经说明(i,i+1)不是最大延迟时间!!!因为如果是,那么交换前就不是最优解了

引理2的推论:交换逆序后,最大延迟时间不变【逆序未导致最大延迟时间】或者变小【逆序导致最大延迟时间】
证明:在这里插入图片描述

币值问题

在这里插入图片描述
解法: 单位价值重量轻的货币优先
注意有两个前提:
1:n=1时候,币值v1=1。即最小币值为v1=1
2:将wi/vi 从大到小排序
在这里插入图片描述
证明:第二类数学归纳法
当n=1,2的时候:
在这里插入图片描述
上述其实就是利用差值比较法,用F1(x2=x2+&)-F1(x2=x2) 前者相当于多用了一点x2(小币值的货币),得到的结果小于0,说明x2越大越好
当n=k时

在这里插入图片描述
得证,至于为什么成立,网上去搜搜吧,有点复杂
说明一下其中:
Gk(y):使用k种硬币来支付Y的硬币总重量 贪心法
Fk(y):使用k种硬币来支付Y的硬币总重量 最优解
vk:第k种硬币的value
wk:第k种硬币的weight
给出一个使用的例子:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值