最早结束时间安排活动--贪心算法证明
活动安排的最优解,一般是贪心算法的思路求取.每一次选择 相对于当前时间 最早结束的活动,得到的子序列是活动的一个最优安排,即在一段时间内安排的活动数最多.
设定命题
贪心算法执行到第k步,选择了k项活动 i1,i2,ik
则存在最优解A,就是所选的这k项的集合 A = {i1,i2,…ik}
意思就是,要证明我们所用的贪心算法,每一步都是最优解
设变量
设共有n项活动待安排,活动的开始时间分别是s1,s2,…sn
活动的结束时间分别是 f1,f2,…fn
将这n个活动按照最早结束时间排好序,也就是f1,f2,…fn从小到大排好序
排好序的n个活动设为S = {a1,a2,…an}
这个活动安排题目的最优解,即安排的活动数最多的子序列,设为A
一共需要选择x次得到最优解
数学归纳法
当算法执行到第k步的话,表示当前已经选择了k项活动.
当k=1时,我们需要证明最早结束的活动a1,一定被选中
此时任取最优解B(其实就刚刚选了一个活动),如果B中第一个活动不是a1,那么可以用a1,替换B中的第一个活动
替换过后的B’也是当前的最优解.所以无论第一个活动在不在B里,都能找到最优解A使得第一个活动一定在最优解A里
假设算法执行k次时,得到的是最优解
A = {i1,i2,…ik}
算法还没有执行完毕,A中剩下活动选自集合S’ = { i | i 属于S ,si>=fk}
S’中的元素肯定输入原集合,但是因为此时已经安排好了k个活动,如果要接着选,那么被选到的活动的开始时间一定是大于等于第k个活动的结束时间
假设从S’中选择的活动集合是C,那么按照我们的贪心算法C是S’的最优解
整体的最优解A = {i1,i2,…ik} U C
如果C不是最优解,D是最优解,说明D中包含的活动比的多
那么整体的最优解应该是 A = {i1,i2,…ik} U D
与A = {i1,i2,…ik} U C是最优解相矛盾
到此
我们在假设贪心算法执行k次,所选择的集合是最优解的条件下
推出 A = {i1,i2,…ik} U C
那么当算法执行k+1次时,即从S’中再选出一个元素 i(k+1) 时,根据上面的假设,我们知道 i(k+1) 一定是S’中开始时间最早的活动,而且C是S’的最优解,
所以{i1,i2,…ik,i(k+1)} U { C- i(k+1) }也是原问题的最优解.
总结
k=1时,一定会选最早开始的活动
假设 k = k时成立
也就是最优解 A = {i1,i2,…ik} U C
那么有 k = k + 1时
A = {i1,i2,…ik,i(k+1)} U { C- i(k+1) }
所以对于这道活动安排题,贪心算法所取得的就是最优解
这东西不像数学公式那样,有板有眼的
我自己理解的也不是很透彻
应该多分析分析就好了吧,毕竟小菜鸡不能变成北京烤鸭
最早结束时间安排活动--贪心算法证明相关推荐
- 活动安排问题(贪心算法)
问题描述: 有n个活动的活动集合E ,其中每一个活动都要求使用同一个资源,而在同一个时刻内资源只能被一个活动使用,每一个活动都有开始是时间和结束时间,要求从活动集合E中选出m个活动,使着m个活动都能顺 ...
- 活动安排问题--贪心算法
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子.该问题要求高效地安排一系列争用某一公共资源的活动.贪心算法提供了一个简单.漂亮的方法使得尽可能多的活动 ...
- C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...
贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...
- NYOJ 14 会场安排问题 贪心算法 之 选择不相交区间
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...
- 会场安排问题贪心算法
问题描述: 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.设计一个有效的贪心算法进行安排(这个问题实际上是著名的图着色问题.若将每一个活动作为图的一个顶点,不相容活动间用边相连.使相邻 ...
- 随手练——HDU-2037 、P-2920 时间安排(贪心)
普通时间安排 HDU-2037 :http://acm.hdu.edu.cn/showproblem.php?pid=2037 选取结束时间早的策略. #include <iostream> ...
- 猿创征文|【第11题】求坐上公交的最晚时间(考察贪心算法)
回城传送–><JAVA筑基100例> 文章目录 零.前言 一.题目描述 二.解题思路 三.代码详解 四.推荐专栏 五.示例源码下载 零.前言 今天是学习 JAVA语言 打卡的第1 ...
- 算法导论之贪心算法(Huffman编码和拟阵)
贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解. 问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最 ...
- Ckp的约会(xmu oj)贪心算法问题 by C++
Ckp的约会(xmu oj)贪心算法问题 by C++ 题目描述 题目分析 代码截图: 题目描述 Ckp的约会 描述 今天Ckp打算去约会.大家都知道Ckp是超级大帅哥,所以和他约会的MM也超级多,她 ...
最新文章
- 网上整理的对于Rest和Restful api的理解
- 60岁代码匠的几篇小作文,解决了大多数程序的迷茫(下)
- 多个ERP系统连接一个EWM系统
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
- mysql 慢查询 定位过程,和order by有关
- 开源 一套 Blazor Server 端精致套件
- mysql delete temporary denied_这些错误是什么意思?djang中的mysql
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
- SpringCloud的Ribbon负载均衡
- 苹果正面临电源芯片短缺问题 可能影响iPhone 12供应
- 算法总结之 一行代码求两个数的最大公约数
- clion配置opencv3.20(cmake+tdm-gcc)
- ADO.NET 3.5 同SQL 2008的新的存储过程保存方式
- linux 图形化修改时区,Centos 7图形化与安装中文支持与修改时区方法
- linux 文件夹中过滤文件内容,【shell】对指定文件夹中文件进行过滤,并修改文件内容的shell脚本...
- STM32机器人控制开发教程No.2 霍尔编码器电机测速以及增量式PID控制(基于HAL库)
- easyUI filebox限定文件大小
- html图像缩小失真,图像放大和缩小不失真的方法!
- 使用C# .net开发微信公众号之设置所属行业
- ThreadLocalMap里弱引用