template<class Type>
/**
* [GreedySelector 活动安排贪心算法]
* @param n [活动总数量, 此处默认n>=2]
* @param start [开始时间数组]
* @param finish [结束时间数组]
* @param mark [是否被选中标记数组]
*/
void GreedySelector(int n, Type start[], Type finish[], bool mark[]){
int j = 1; // 最后一个被选中的下标;
mark[j] = true;
for(int i=2; i<=n; i++){
if(start[i]>=finish[j]){
mark[i] = true;
j = i;
}else{
mark[i] = false;
}
}
}
/**[活动安排问题描述]
* 假设n个活动的集合为 E = {i| i=1,2,..., n}
* 开始时间集合 start = {s1, s2, ..., sn}
* 结束时间集合 finish = {f1, f2, ..., fn} 其中 finish 是非降序列 即 i<j => fi <= fj
* 现在要求一个活动安排集合mark, 对于mark中的任意活动i,j,要求 fi<=sj 或者 fj<=si
* =================================================================================================================================
* 结论: 在活动安排问题中, 贪心选择算法一定能得到全局最优解
* =================================================================================================================================
* 证明步骤:
* Target 1. 证明总是存在以贪心选择开始的最优活动安排方案;
* Target 2. 证明对于做出贪心选择后, 原问题等价于"对剩余与贪心选择活动相容的活动进行安排的问题"
* 即证明若E是总的活动集合, 那么A是原活动集合E的最优安排,那么A' = A-{1} 是活动 E' = {i∈E| start[i] >= finish[1]} 的最优解
*=================================================================================================================================
* 证明如下:
* 1.[Target 1]
* 假设 P是活动E的一个最优解, 而P中的第一个活动是k.
* 若k为1, 那么此P即为以贪心选择开始的活动安排,即证;
* 否则, 活动安排P的第一个活动k>1, 现在考虑构造一个活动安排Q=P-{k}+{1},
* 由于finish[1]<=finish[k](finish列表非降), 又由于P是一个合法的活动安排,因此Q也是一个合法的活动安排,且活动安排数量一致;
* 因此P是最优解=>Q为最优解 => 活动安排Q是以贪心选择开始的活动安排.
*
* 2.[Target 2]
* 假设P是活动E的一个以贪心选择开始的最优解, 那么现在考虑 E中兼容活动{1}的所有活动的集合活动 E' = {i∈E| start[i] >= finish[1]}
* 我们有 P' = P-{1} 是 E'的一个活动安排, 我们要证明P'是最优的活动安排:
* 假设 Q 是活动E'的一个最优解, 假设它具有比P'更多的活动, 那么将活动{1}加入Q, 那么将得到活动集合E的一个最优解Q+{1}
* 则|Q+{1}| = |Q|+1 > |P'|+1 = |P-{1}| + 1 = |P| 因此 对于活动集合E来说 Q+{1} 是比 P 更优的解,矛盾.
*
* 综合上述两点可以知道, 对于活动安排问题,贪心算法得到的是全局最优解.
*=================================================================================================================================
*/相关推荐
活动安排问题(贪心算法)
活动安排问题(贪心算法)活动安排问题(贪心算法)
活动安排算法
问题描述 设有n个活动,每个活动要求使用统一资源,每个活动i都有起始时间s和一个结束时间f,活动1执行完成后活动2也可以完全执行,则活动1与活动2相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。活动结束时间以升序排列。 ###算法分析 1.活动安排问题可以用贪心算法求解,从贪心算法的思想出发,总是作出当前最好的选择,并不需要从整体最优考虑,完成的是局部最优选择,整体最优解可以通过一系列局部最优的选择当然活动安排问题用贪心算法求解则是最优选择。 2.基本思路 一、建立数学模型来描述问题。
贪心算法活动安排问题,
活动安排问题是利用贪心算法有效求解的很好例子。该问题要求高校的安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法,使尽可能多的活动可以兼容的使用某一公共资源
活动安排(贪心算法)
贪心算法总是做出在当前看来是最好的选择。但贪心算法并不从整体最优加以考虑,它所做出的选择只是在某种意义上的局部最优选择。但其最终结果能达到预期目的,或者是最优解的近似解。 活动安排是贪心算法的一个很好的例子:设有n个活动的集合E={1,2,3.....,n},其中每个活动都要求使用同一资源(一个时间段只能安排一个活动)。每个活动都有一个起始时间Si和一个结束时间Fi。如果选择了活动i,则它在半开
贪心算法实现活动安排问题
贪心算大实现活动安排问题,算法实现使用图形界面动态显示,程序中用到的排序算法为快速排序
PHP证书图片生成
$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色
算法设计与分析——活动安排问题(Java)
算法设计与分析——活动安排问题(Java) 算法设计与分析 贪心法求解活动安排问题的算法
Petalinux-2018.3添加内核驱动(linux-xlnx源码打补丁)
大部分模块可以直接使用,需要添加自己的驱动文件时,可以通过linux-xlnx源码打补丁方式和使用PetaLinux编译为.ko文件加载运行,本文章介绍通过linux-xlnx源码打补丁方式添加内核驱动文件。根据查找资料,了解到可以通过打补丁方式添加到工程文件中。. /opt/tool-pkg/petalinux/2018.3/components/yocto/source/arm/layers/core/oe-init-build-env (该执行文件在Petalinux软件安装路径下)
【算法设计与分析】活动安排问题(动态规划和贪心算法)
活动选择问题描述 假设我们存在这样一个活动集合S={a1,a2,a3,a4,...,an},其中每一个活动ai都有一个开始时间si和结束时间fi保证(0≤si<fi),fi保证(0≤si<fi),活动aiai进行时,那么它占用的时间为[si,fi)[si,fi).现在这些活动占用一个共同的资源,就是这些活动会在某一时间段里面进行安排,如果两个活动aiai和ajaj的占用时间[si,f...
Python-自动化绘制股票价格通道线
创建更强大、更可靠的价格通道检测算法。
Cadence 开发合集【总目录】
专栏主要介绍Cadence原理图和PCB信号完整性电源完整性仿真相关的内容,更加注重实操,以帮助大家轻松上手并不断提高;在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。 ............
贪心算法之活动安排(自我练习)
#include<iostream> using namespace std; #define MAXSIZE 5 int s[5] = { 1,3,6,8,9 }; int f[5] = { 2,6,9,11,12 }; void timeSelector(int s[], int f[], int n) { int j = 0, index = 1; int temp[MAXSIZE] = { 1 }; for (int i = 1; i < n; i++) { if (s.
基于 MATLAB 的精馏塔模拟仿真
基于 MATLAB 的精馏塔模拟仿真精馏塔是一种重要的化工设备,其中乙烯精馏塔和醋酸乙烯精馏塔是常见的两种精馏塔。本文基于 MATLAB 软件,给出了针对这两种精馏塔的模拟仿真代码。
一文绝对弄懂贪心算法解决活动选择问题
接下来使用C++实现的。
SpringCloud Alibaba - Seata 实现高可用和异地容灾
这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091。
Open3D——平面点云凸多边形轮廓提取【2025最新版】
平面点云凸多边形轮廓提起,博客长期更新,本文最近更新时间为:2025年1月6日。
[贪心算法]「一本通 1.1 例 1」活动安排 「一本通 1.1 练习 3」线段
#10000. 「一本通 1.1 例 1」活动安排 简洁题意:给定n个区间,求最多互不覆盖区间数 题解:贪心,使结束时间(右端点)升序,能加就加,尽可能在ans相同情况下剩下更大空间。 #include<cstdio> #include<algorithm> using namespace std; struct node{int s,e;}a[1010]; bool cmp(node x,node y){ return x.e<y.e; } int main() { int
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
什么是贪心算法?如何学贪心算法?咋使用贪心算法?一篇文章教会你!
【代码】贪心算法
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
ACM--贪心算法--活动安排问题二
51nod题目地址:点击打开链接 有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? 分析:能否按照之一问题的解法,每个教室安排尽可能多的活动,即按结束时间排序,再贪心选择不冲突的活动,安排一个教室之后,剩余的活动再分配一个教室,继续贪心选择…… 反例: A:[1,2) B:[1,4) C:[5
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
ACM贪心算法总结
通过这一段时间对贪心算法的练习,即通过对落单的数、主元素等的编程,我加深了对贪心算法的理解,更加明白如何通过贪心找到其局部最优解。 注意:贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解。 基本思想:通常以把总体分开的方式进行,以依次调整的方式作出相继的贪心选择,每一次的贪心选择将所求问题简化为规模更小的子问题。 做题情况: 学习贪心算法,所给的15道题中只AC了10道,并...
实验7 贪心算法实验一
实验7 贪心算法实验一 OJ练习 1. Bone Collector: http://acm.hdu.edu.cn/showproblem.php?pid=2602【01背包】 2. Big Event in HDU: http://acm.hdu.edu.cn/showproblem.php?pid=1171【01背包】 3*. 饭卡: http://acm.hdu.edu.cn/sho...
【贪心】活动安排问题
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该...
C&C++实现算法习题第三部分—贪心算法(一)
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 一. 活动安排问题 问题描述 设有n个活动的集合E= {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<...
算法习题——会场安排问题
问题描述: 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排 对于给定的k个待安排的活动,计算使用最少会场的时间表。 输入数据的第一行有1 个正整数k(k≤10000),表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时间。时间以0 点开始的分钟计。 解题思路: 1) 对每个活动按照结束时间的先后进行排序 2) 开始按照顺序遍历,如果另一个活动的开始时间早于当前活动的结束时间,则要新分配一个会场;如果另一个活动的时间
2201



被折叠的 条评论
为什么被折叠?



