贪心算法

总是选择当前看起来最优的选择(局部最优解),得到的结果是一个整体最优解。

但是总是选择局部最优解并不总是能得到整体最优解,需要在问题具有:贪心选择性和优化子结构时才成立。

贪心选择性:第一次做出贪心选择是正确的;

优化子结构:第一次做完贪心选择后,得到一个与原问题定义相同(但输入不同)的子问题;

贪心算法的基本要素

贪心选择性质

1.贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

2.贪心算法通常以自顶向下的方式进行,一迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。动态规划通常以自底向上的方式解决子问题。

最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。

贪心算法的求解过程

问题的定义
优化解的结构分析
算法设计
算法复杂性
算法正确性证明

活动安排问题定义

定义(活动)

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这个资源。

定义(相容活动)

若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。

活动安排问题的贪心算法思路

1.将各个活动按照活动结束时间fi排序,且f1<=f2<=f3…

2.选择活动1,要求该活动的结束时间最早

3.从2开始按顺序比较各个活动,选择第一个与活动1相容的活动i

4.从i+1开始按顺序考察各个活动,选择第一个与活动 i 相容的活动 j

**每次选择与现有活动相容的结束时间最早的活动 **

举例详解算法过程

现在给出下列活动,s表示开始时间,f表示结束时间;


根据算法,我们首选选择结束时间最早的活动作为第一个活动,第一个活动为:1

然后选择开始时间大于第一个活动的结束时间的活动,而且该活动的结束时间要求最早。显然是活动4;

同理,寻找开始时间晚于活动4的结束时间且结束时间最早的活动,一直到到无活动可选为止。

复杂度分析

算法可以得到最优解的证明

证明贪心算法可以得到最优解要求:

  1. 证明第一次选择是正确的
  2. 证明第一次选择后,问题输入变为与第一个活动相容的活动的子问题
    (因为第二个选择的活动 i 是 E’ 中结束时间最早的,所以活动 i 是正确的
    依次类推所有的选择都是正确的)

贪心算法之活动安排问题(填表详解+思路解析)相关推荐

  1. 算法笔记(0002) - 【贪心算法】活动安排问题

    贪心算法 原理 在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许 ...

  2. 贪心算法解决活动安排-Python实现(排序+贪心选择)

    贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...

  3. 贪心算法之活动安排问题C语言代码

    贪心算法之活动安排问题C语言 问题描述 该问题要求高效地安排一系列争用某一公共资源的活动. n:活动的个数,其中每个活动都要求使用同一资源,如演讲会场等.而且在同一时间内只有一个活动能使用这一资源. ...

  4. 贪心算法实现活动安排问题

    贪心算法实现活动安排问题: 设有n个活动的集合E={1,2,...,n},其中,每个活动都要求使用同一资源,如演讲会场等,而在同一时间内,只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的 ...

  5. 贪心算法-02活动安排问题

    活动安排问题 简介 活动安排问题是需要共享公共资源的一系列活动的高效安排问题,以在限定的资源前提下尽可能多地安排活动.一般,算法题中给出开始结束时间的活动序列都可以使用这种贪心思路. 问题描述 有若干 ...

  6. C++编程笔记:贪心算法实现活动安排问题

    问题描述: 设有n个活动的集合E={1,2,-,n},其中,每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且s ...

  7. 贪心算法之 活动安排(Java代码实现)

    活动安排问题 – 资源争夺 问题描述 设有 n 个活动的集合 A = {1, 2, - , n}, 其中每个活动都要求使用同一资源,而在同一时间段内只有一个活动能使用资源 要求高效安排一系列争用公共资 ...

  8. 【贪心算法】活动安排问题

    活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子. 该问题要求高效地安排一系列争用某一公共资源的活动. 贪心算法提供了一个简单.漂亮的方法使得尽可能多的 ...

  9. 基于贪心算法的活动安排问题

    一.问题的描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动. 现在小刘有一些活动计划的 ...

最新文章

  1. vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题
  2. ldd -r xxx.so命令的重要作用------见招拆招地解决缺库问题(undefined symbol)
  3. centos 6.5安装GitLab全过程和问题记录
  4. 网络工程师面试:简要回答一下故障排除的过程?
  5. python扫盲系列(5)--列表、元组、字典、集合
  6. vscode 运行vue_Vue初体验
  7. mysql分组后再分组_全网最全的mysql分组后取topN的解答
  8. word 中间页插入页码
  9. 时态数据库的应用介绍(1)
  10. 【XSY2774】学习 带花树
  11. APP软件半成品测试技巧
  12. RemObjects SDK简介
  13. 微博三方登陆原理讲解
  14. 计算机基础快捷键的使用
  15. 国密SM2签名之公私钥及证书生成
  16. taylor+swift纽约公寓_欧美明星豪宅都有多美,眼见为实!
  17. python回车换行怎么不行_python回车不能换行怎么办
  18. 大数据时代的10个重大变化
  19. QtAndroid详解(1):QAndroidJniObject
  20. Codeforces 91A Newspaper Headline

热门文章

  1. 微星主板在停过电后无法被远程开机
  2. Intel SSD 760P 缓存机制实验与分析报告
  3. MTK-MT6771芯片资料,最新的MT6771芯片规格书原理图设计资料
  4. PHP基础-表单数据
  5. 【年度大戏】勒索”嘿客“无间道之战
  6. QCC5124与QCC5125主要功能对比
  7. 知物由学|游戏开发者如何从容应对Unity手游风险?
  8. nmn是个什么东西,一篇文章让您客观了解nmn对身体有什么好处
  9. 品质为先,服务不停,广州流辰信息公司恪守初心,匠心为民!
  10. 滑膜观测器物理意义_什么是 滑模观测器