1.定义:不从整体上加以考虑,而是得到局部最优解。关键:贪心策略的选择。
2.贪心算法适用情况:2张100,1张50,3张20,一张10,拿三张最大值是?
3.贪心不适用情况:
因为这个时候不能只考虑局部最大,而忽略整体关系。
4.贪心的设计过程中,主要是在寻找偏序关系:
例题1:
贪心策略:
对策略正确性的证明:其实证明很简单。假设我们在第k处删除。如果在前面删除,因为是顺序位所以删完之后,对应位数的值反而会增大。在第k位删除恰好可以让第k位减小,而前面位数不变。
例题2:
1.从二维变为一维:确定起始行和终止行的位置。
2.求出对应行间的每一列和,问题转变为求一个最大(连续)子序和的问题。
即从二维最大子阵-->一维最大子序
例题3:最小操作次数:
贪心策略及其理解:
表现为具体的贪心算法策略:
也就是说,如果a*k还没有比b大的时候,(我们假设a与b左端点是对齐的,那么我们想让a先加上b的对应末尾之后,再*k)
在k进制下,当情况1满足时,说明我们还想让a进位来接近b。
例题4:安装雷达:
1,数据映射:
将每一个小岛映射为在x轴上的一维区间形式,从而问题转化为x轴上被染色的区间上要存在某点是雷达所在的位置。
放在区间的末尾,就是为了能够最大限度的满足部分重叠区间的最小值。
例题5:挤奶:
例题6:奶牛晒太阳:
贪心策略:
例题7:
贪心策略:
意思就是,我们肯定要先满足时间最长的。在满足时间最长的时候,尽可能选择满足他要求中的难度系数最小的,以给后面留出更多机会。
贪心算法总结: