贪心算法之活动安排问题

活动安排问题(贪心算法及证明) 会场安排问题(贪心算法):贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。2.相关代码:#include<stdio.h> #define M 11 ... 阅读详情

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

问题描述

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。
在这里插入图片描述

问题求解

活动安排问题的最优解是再所有活动集合中选出数量最多的相容活动子集合。若用贪心算法表示为:就是找出最早完成的活动,然后按照活动相容的条件依次往后寻找。这里能够发现:需要将所有活动按照结束时间进行非降序的排序,依次排列遍历找出最大的相容活动子集合。

描述活动的数据结构:

typedef struct{
   int s;//活动开始时间
   int f;//活动结束时间
   int index;//活动序号,视情况而定是否用上
}action;

根据活动的结束时间进行非降序排序:

//根据活动结束时间进行非降序排序
void sort_action(action a[],int n)
{   int i,j;
    action temp;
    for(i=1;i<=n;i++)
    for(j=1;j<=n-i;j++)
    {
        if(a[j].f>a[j+1].f)
        {
            temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
        }
    }
}

求解代码

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct{
   int s;//活动开始时间
   int f;//活动结束时间
   int index;//活动序号,视情况而定是否用上
}action;
//根据活动结束时间进行非降序排序
void sort_action(action a[],int n)
{   int i,j;
    action temp;
    for(i=1;i<=n;i++)
    for(j=1;j<=n-i;j++)
    {
        if(a[j].f>a[j+1].f)
        {
            temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
        }
    }
}

int main()
{
    int n;//输入n代表有n个活动
    cin>>n;
    action a[n+1];
    for(int i=1;i<=n;i++){
        cin>>a[i].s>>a[i].f;
        a[i].index=i;//构造活动结构体数组
    }
    sort_action(a,n);//冒泡排序
    bool b[n+1];
    int num=1;
    b[1]=true;//第一个活动必定安排
    int pretime=a[1].f;
    for(int i=2;i<=n;i++){
        if(a[i].s >= pretime){
            b[i]=true;
            num++;//a[i]活动安排上
            pretime=a[i].f;//更新pretime
        }else{
            b[i]=false;
        }
    }
    //输出相容的最大活动数目
    cout<<num<<endl;
    //根据情况是否输出活动序号
    for(int i=1;i<=n;i++){
        if(b[i]) cout<<a[i].index<<" ";
    }
    return 0;
}

在这里插入图片描述

问题延伸

现在问如果要把所有的活动全部安排上,请问最少需要几个活动场地。
问题的实质就是:所有的活动集合能够划分成多少个最大相容的子集合,从而使所需要的活动场地最少。

活动安排(贪心算法)C/C++ 题目描述 有n份兼职,每份兼职有一个开始时间和一个结束时间,假设你的空闲时间为从1到m,假如你的休息时间可以忽略, 请你选择若干份兼职(每次只能做其中一个兼职),使你在该段空闲时间内完成的兼职份数最大。 输入 第一行为两个整数n,m分别表示n份兼职,空闲时间为1到m(1<=n<=1e4,1<=m<=1e5)。 接下来n行每行有2个整数a,b。表示该兼职开始和结束时间(1<=a<=b<=m)。 输出 输出你在1到m时间段内最多能完成几份兼职。 样例输入 4 10 1 阅读详情

相关推荐

活动安排问题-贪心算法

贪心算法:贪心算法总是做出在当前看来最好的选择,也就是贪心算法不从整体最优化的角度考虑。它所做出的选择只是在某种意义上的局部最优选择 性质:最优子结构性质当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质 与动态规划的差异:贪心算法从局部出发,每一次得到的最优解,在考虑求解最优解的时候沿用上一次的最优解,之前的最优解不做保留。动态规划从全局出发,全局最优解中一定包含某个局部最

叫我小雷雷就好 4190

贪心算法——活动安排问题

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。

weixin_45383604的博客 1081

贪心算法-活动安排问题

** 问题概述 ** 设有n个活动的集合E={1,2,……,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在时间区间[si,fi]内占用资源。若区间[si,fi]与区间[sj,fj]不相交,则称活动i与活动j是相容的。也就是说,当si>=...

qq_22141033的博客 3363

贪心算法解决活动安排问题

4.2 活动安排问题 设有n个活动的集合E={1, 2, …, n},其中每个活动都要 求使用同一资源,如演讲会场等,而在同一时间内只有一个 活动能使用这一资源。 每个活动i都有一个要求使用该资源的起始时间si和一个 结束时间fi,且si<fi。如果选择了活动i,则它在半开时间区 间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则 称活动i与活动j是相容的

razorEdge的博客 1万+

贪心算法一定能得到最优解的证明【活动安排问题举例】

贪心算法一定能得到最优解的证明 按照老师说法是 分为三步: 证明总存在一个以贪心选择开始的最优解。 此问题具有最优子结构的性质。 用数学归纳法,总结得到结论。 以活动安排为例,首先,我们按照按照活动结束时间非递增排序,即从小到大得到一个序列 E{1、2、…、n),我们可以知道1这个活动是一定会被选到的,因为他的结束时间最早,我们可以有更多的时间去观看其他比赛。 假设具有一个最优解A,且A中的活...

weixin_44079946的博客 1万+

双重机器学习 stata教程 手把手教学

双重机器学习(DDML)的stata教程

weixin_59030591的博客 1万+

贪心算法——活动安排问题(C++实现)

贪心算法——活动安排问题(C++实现) 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。如果选择了活动i,则它在半开

wmx1117的博客 1万+

刚入职,软件测试岗,有点迷茫不知道下一步怎么提升自己

软件测试前景和发展都是不错,已经入了软件测试这行业就坚挺下去

大白的博客 2218

活动安排问题——贪心算法解决方案

1、概述 (1)案例: 多个社团申请同一间教室开会,问如何分配和安排,使得此教室在一天中能够分配给更多的社团使用 一台公共电脑可以被许多人申请使用,如何分配使得此电脑在一天中能够为更多的人服务使用 (2)活动安排问题概述 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼...

wangqsse的博客 7546

Nvidia AGX Xavier刷机指北

因为工作的关系,要在AGX上安装CUDA。nvidia官网上没找到适合AGX版本的CUDA,只能走刷机的路子。刷机过程中,也遇到一些坑,做个记录。 需要有一台ubuntu系统的电脑作为主机Host。我的主机系统为Ubuntu18.04 整个刷机过程为: 在Host上安装sdkmanager,整个刷机过程主要通过sdkmanager来操作。 在Host自动下载一些系统组件,各种deb包 Host上制作OS系统镜像,烧录到AGX中 Host上之前下载好的deb包,安装到AGX中。 完结,撒花 ...

sinat_38685124的博客 6294

从《视觉SLAM十四讲》到项目实战:一文读懂拓扑地图与语义地图为何是服务机器人的未来

本文探讨了服务机器人地图技术的演进,从传统几何地图到拓扑地图与语义地图的跨越。通过分析栅格地图的局限性和拓扑地图、语义地图的优势,揭示了它们在动态开放环境中的智能应用。文章还介绍了多模态语义融合架构和动态语义更新技术,为服务机器人的未来发展提供了技术路线图。

weixin_30292843的博客 478

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

贪心算法实现活动安排问题: 设有n个活动的集合E={1,2,...,n},其中,每个活动都要求使用同一资源,如演讲会场等,而在同一时间内,只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则他在半开时间区间[si,fi) 内占用资源。若区间[si,fi)与区间[sj,fj)不相交,则称活动i和活动j是相容的。也就是说,当si>=fj或sj<=fi时,活动i与活动j相容。 活动安排问题就是要在所给的活动集合中选出最大

qq_44423388的博客 4642

模型检测--工具KeYmaera

论文:KeYmaera: A Hybrid Theorem Prover for Hybrid Systems 作者:Andre Platzer and JanKeYmaera摘要1 介绍2用于混合系统的KeYmaera验证工具3混合系统,混合自动机和混合程序 摘要 KeYmaera是一种用于混合系统的混合验证工具,它结合了演绎,实数代数和计算机代数证明者技术。它是自然的自动和交互式定理证明器 混合系统的规范和验证逻辑。 KeYmaera支持差分动态逻辑,它是用于混合程序的实值一阶动态逻辑,是混合自动机的程

ziigea的博客 1077

活动安排问题 之 贪心算法

贪心算法思想:顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 活...

田野中的锋芒 1648

AES-GCM加密认证模式:原理、优势与实战应用

在数据安全领域,加密与认证是保障信息机密性和完整性的两大基石。加密确保数据内容不被窃取,而认证则验证数据来源的真实性和传输过程中是否被篡改。传统的加密后认证方案如AES-CBC+HMAC需要串行处理,性能开销较大。GCM(伽罗瓦/计数器模式)作为一种认证加密(AEAD)方案,巧妙地将AES-CTR加密与基于伽罗瓦域的GHASH认证并行结合,实现了单次数据遍历即可同时完成加密和认证,大幅提升了处理效率。其核心价值在于高性能、支持附加认证数据(AAD)以及标准化程度高,广泛应用于TLS协议、无线网络安全和云存储

weixin_28622215的博客 313

2025年上半年第1批信息系统项目管理师论文真题解析与范文

文章首先分析了项目经理在交付绩效域中应关注的重点领域,然后按照项目管理五大过程组顺序,阐述了各过程组中与交付绩效域协同的绩效域及协调目标,最后制定了各过程组中交付绩效域的测量指标。本项目的实践表明,系统化的交付绩效管理不仅能保证项目成功,还能创造超出预期的业务价值。需要结合具体项目案例,按照五大过程组(启动、规划、执行、监控、收尾)顺序,分析各过程组中与交付绩效域协同的其他绩效域及其协调目标。价值交付连续性:建立敏捷交付机制,将项目分解为12个迭代周期,每周期交付可验证成果,确保价值持续流动。

Programming Talk 822

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

活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。 该问题要求高效地安排一系列争用某一公共资源的活动。 贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。 【问题描述】 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。 每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在半开时间区间[si ,fi .

Woo~ 5779

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

算法-贪心算法-活动安排问题

关于贪心算法:https://blog.youkuaiyun.com/qq_40452317/article/details/88875193 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。 问题描述和分析 设有n个活动的集合E={1,2,…,n},其中...

朝歌 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

贪心算法 总是选择当前看起来最优的选择(局部最优解),得到的结果是一个整体最优解。 但是总是选择局部最优解并不总是能得到整体最优解,需要在问题具有:贪心选择性和优化子结构时才成立。 贪心选择性:第一次做出贪心选择是正确的; 优化子结构:第一次做完贪心选择后,得到一个与原问题定义相同(但输入不同)的子问题; 贪心算法的基本要素 贪心选择性质 1.贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。 2.贪心

weixin_44952817的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

活动安排问题(贪心算法)

引入:        贪心算法总是做出在当前看来是最好的选择。也就是说贪心算法并不是从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优选择。 贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心法不要回溯。能够用贪心算法求解的问题一般具有两个重要特

weixin_44469806的博客 6737

活动安排问题与贪心算法

贪心算法: 在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。 从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 如果一个问题同时可以用几种问题解决,贪心算法应该是最好的选择之一...

努力进阶的小菜鸟 2895

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

贪心算法 原理 在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。 特性 贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得...

YINUXY'S BLOG 1万+
上一篇: 动态规划之最长公共子序列问题
下一篇: n的全排列分治递归求解
practical_sharp
博客等级 码龄8年 499粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值