【引入】
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
【简单实例】
1.最优装载问题
给定n个物体,第i个物体重量为wi,选择尽量多的物体,使得总重量不超过C。
贪心策略:先装最轻的。
2.部分背包问题
有n个物体,第i个物体的重量为wi,价值为Vi,在总重量不超过C的情况下让总价值尽量高。每一个物体可以只取走部分,价值和重量按比例计算。
贪心策略:先选性价比高的。
3.乘船问题
有n个人,第i个人重量为wi。每艘船的载重量均为C,最多可乘两个人。求用最少的船装载所有人的方案。
贪心策略:最重的人和最轻的人配对。
【经典实例】
1.选择不相交区间问题
给定n个开区间(ai,bi),选择尽量多个区间,使得这些区间两两没有公共点。
贪心策略:按照bi升序排序,选择与前边不相交的区间。
2.区间选点问题
给定n个闭区间[ai, bi],在数轴上选尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。
贪心策略:按照bi升序排序,若不包含则取bi。
3.区间覆盖问题
给n个闭区间[ai,