贪心算法——(2:应用)

昨天我们初步了解学习了贪心算法,但仅仅是一些皮毛而已,今天我们来看看贪心的应用。

**

贪心的经典应用

**(一)、三个区间上的问题
1、选择不相交区间问题
2、区间选点问题
3、区间覆盖问题
(二)、两个调度问题
1、流水作业调度问题
2、带限期和罚款的单位时间任务调度
(三)Huffman编码
(四)最优合并问题**

**

1、选择不相交区间问题

**

**给定n个开区间(ai, bi),选择尽量多个区间,使得这些区间两两没有公共点。
【算法实现】首先按照b1<=b2<=…<=bn的顺序排序,依次考虑各个活动,如果没有和已经选择的活动冲突,就选;否则就不选。
贪心策略:取第一个区间;
【正确性】:如果不选b1,假设第一个选择的是bi,则如果bi和b1不交叉则多选一个b1更划算;如果交叉则把bi换成b1不影响后续选择。**

例题1:活动安排

设有n个活动的集合E={1,2,..,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si

2、区间选点问题

给定n个闭区间[ai, bi],在数轴上选尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。

【算法】:首先按照b1<=b2<=…<=bn排序。每次标记当前区间的右端点X,判断下一个区间的左端点是否小于等于X,直到当前区间不包含X,再重复上述操作(又取当前区间的右端点……)。

贪心策略:取最后一个。

**

例题2:种树(NOIP模拟试题)

**
一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号为1..n。每个块大小为一个单位尺寸并最多可种一棵树。每个居民想在门前种些树并指定了三个号码b,e,t。这三个数表示该居民想在b和e之间最少种t棵树。当然,b<=e,居民必须保证在指定地区不能种多于地区被分割成块数的树,即要求t<=e-b+1。允许居民想种树的各自区域可以交叉。出于资金短缺的原因,环保部门请你求出能够满足所有居民的要求,需要种树的最少数量

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/qq2579937786/article/details/77428034
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞