活动安排算法

2023-10-27

问题描述

设有n个活动,每个活动要求使用统一资源,每个活动i都有起始时间s和一个结束时间f,活动1执行完成后活动2也可以完全执行,则活动1与活动2相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。活动结束时间以升序排列。

算法分析

1.活动安排问题可以用贪心算法求解,从贪心算法的思想出发,总是作出当前最好的选择,并不需要从整体最优考虑,完成的是局部最优选择,整体最优解可以通过一系列局部最优的选择当然活动安排问题用贪心算法求解则是最优选择。

2.基本思路

一、建立数学模型来描述问题。

二、把求解的问题分成若干个子问题。

三、对每一子问题求解,得到子问题的局部最优解。

四、把子问题的解局部最优解合成原来解问题的一个解。

java 源代码:

import java.util.Scanner;

public class Greedy {
    public static void greedySelector(int []s,int[] t,boolean []a){
        a[0] = true;
        int j=0;
        int count=1;
        for (int i = 1; i <=s.length-1; i++) {
            if(s[i]>=t[j]){
                a[i]=true;
                j=i;
                count++;
            }
            else a[i]=false;
        }
        System.out.println("活动个数:");
        System.out.println(count);
        System.out.println("活动顺序:");
        for (int i = 0; i < a.length; i++) {
            if (a[i]==true){
                System.out.print(i+",");
            }
        }
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);      //活动以结束时间升序排列
        System.out.println("输入活动个数:");
        int a = sc.nextInt();
        int[] f = new int[a];
        int[] g = new int[a];
        System.out.println("依次输入全部活动的开始时间:");
        for (int i = 0; i < a; i++) {
            f[i] = sc.nextInt();
        }
        System.out.println("依次输入全部活动的结束时间:");
        for (int i = 0; i < a; i++) {
            g[i] = sc.nextInt();
        }
        boolean [] b = new boolean[a];
        Greedy test = new Greedy();
        test.greedySelector(f,g,b);
    }
}

在这里插入图片描述

复杂度分析

贪心算法不是很复杂的算法,当输入的活动已按结束时间的升序排列,算法只需*O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未非升序排列,可以用O(nlogn)*的时间重排。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

活动安排算法 的相关文章

随机推荐

  • 039. (9.12) 数模国赛C题 中小微企业的信贷决策 第三题思考

    C 中小微企业的信贷决策 第三题思考 思考 查阅 特征工程改进 模型改动方面 企业的生产经营和经济效益可能会受到一些突发因素影响 而且突发因素往往对不同行业 不同类别的企业会有不同的影响 思考 正则化提取打标签 类别太多 难分 如果要用这种
  • oracleBLOCK(数据块)

    11 4 BLOCK 数据块 11 4 1 BLOCK 数据块 的特点 BLOCK是Oracle进行存储空间IO操作的最小单位 BLOCK的管理方法是区的管理和段管理的具体体现 1 自动管理方式 如创建表空间时区为本地管理方式 并且将段的存
  • shape和resize对应的高(height)和宽(weight)的顺序

    无论是pytorch还是opencv 都有对应的成员变量shape以及函数resize 其对应的高 height 和宽 weight 的顺序是不一样的 使用opencv举一个例子 import cv2 img cv2 imread 1 jp
  • linux shell 获取某个时间段内的文件

    shell脚本里 我们主要用find命令来搜索某类文件 所以在这里 我们也用find来查找时间段内的文件 主要方法有两种 一 使用mtime来搜索 这类方法只能精确到天数 但是一般的需求 也并不需求那么精确的时间 所以还是可以满足大部分需求
  • 自己生成AIX bff打包安装文件

    复杂度3 5 机密度4 5 最后更新2021 04 28 AIX提供了生成打包文件的命令 mkinstallp 需要安装bos adt insttools fileset 查看fileset是否已经安装 lslpp L bos adt in
  • 秒转时分秒 js

    一 方法一 http jingyan baidu com article 375c8e19a0413925f2a229d2 html
  • 高效的使用top

    为什么80 的码农都做不了架构师 gt gt gt 对桌面用户来说 监视系统资源使用是一项重要的工作 通过这项工作 我们可以找到系统瓶颈所在 针对性的进行系统优化 识别内存泄露等 问题是 我们应该用什么软件 以及如果针对我们的需求使用它 在
  • Jedis使用教程详解

    目录 一 前言 二 基本使用 三 Jedis连接池 四 连接池参数 五 哨兵模式 六 集群模式 七 Springboot当中使用Jedis 八 Springboot源码分析 一 前言 Jedis是Redis的一款Java语言的开源客户端连接
  • 分库分表实战(10):新的挑战 — 千万级数据优化之垂直拆分

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 前 言 读写分离方案上线后 订单sql查询时间再一次稳定在了300ms以下 此时对数据的增删改操作会走主库 而读请求会走从库 通过读写分离大大提升了数据读的处理能力
  • vue顶部菜单加左侧菜单_vue动态路由+侧边栏菜单之侧边栏菜单

    直接放我侧边栏组件代码 相关代码在vue动态路由 侧边栏菜单之动态路由 参考略作修改即可 新建目录Sidebar Sidebar gt index vue background color 304156 text color fff act
  • 阿里工程师修养之:技术三板斧:关于技术规划、管理、架构的思考的概述

    技术三板斧 前言 一 关于技术规划三板斧 二 关于技术管理三板斧 三 关于技术架构三板斧 四 关于赛车 赛道 赛手三段论 五 关于点线面体的思考 前言 实践需要理论的指导 理论从实践中来 作为技术工程师 要不断地从事件中反思经验 总结规律
  • sqldeveloper安装

    1 安装 下载地址 解压之后 运行目录下面的文件即可 运行界面如下 sqldeveloper是基于jdbc的 所以需要创建连接 打开SQL工作表 工具 gt SQL工作表 或者使用快捷键Alt F10 选择连接 2 连接Oracle数据库及
  • xshell 7使用密钥证书登录CentOS 7.9

    xshell 7证书登录CentOS 1 打开xshell 点击 文件 新建 2 连接成功后点击 工具 用户密钥管理者 点击 生成 密钥类型默认RSA 然后下一步 生成密钥后点击属性 然后把密钥复制下来 也可保存为文件 此时回到系统用户目录
  • Linux Host is not allowed to connect to this MySQL server解决方法

    先说说这个错误 其实就是我们的MySQL不允许远程登录 所以远程登录失败了 解决方法如下 在装有MySQL的机器上登录MySQL mysql u root p密码 执行use mysql 执行update user set host whe
  • Java教程(JAVA、分布式、微服务)

    Java语言教程 http www codingdict com tutorials Java教程 http www runoob com java java multithreading html Spring Cloud教程 http
  • java设计模式--[行为模式]--状态模式[state pattern]

    一 狀態模式 允許一個對象在其內部狀態改變時改變它的行為 這個對象看起來似乎修改了它的類 看起來 狀態模式好像是神通廣大 居然可以修改自身的類 二 狀態模式包括三個角色 1 環境 環境是一個類 該類含有抽象狀態聲明的變量 可以引用任何具體狀
  • 电脑正常登录QQ微信,但浏览器无法打开网页,这个你一定要学会!

    电脑能正常登录微信 QQ 但是浏览器无法打开网页的情况时有发生 掌握这三个方法 就能轻松解决问题 NO 01 检查电脑DNS是否正常 首先按Win R 输入CMD 回车 输入ping baidu com 回车 网络正常情况有回复 有 来自x
  • element table组件实现保留横向滚动条,去除纵向滚动条

    实现仅去除纵向滚动条效果 项目开发中 有这样一个需求 实现表格内容自动滚动 去掉纵向滚动条 代码如下所示 v deep webkit scrollbar width 0 height 0 这种写法确实实现了去掉了纵向滚动条的效果 不过对于我
  • 华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)

    一 题目描述 公司用一个字符串来标识员工的出勤信息 absent 缺勤 late 迟到 leaveearly 早退 present 正常上班 现需根据员工出勤信息 判断本次是否能获得出勤奖 能获得出勤奖的条件如下 缺勤不超过1次 没有连续的
  • 活动安排算法

    问题描述 设有n个活动 每个活动要求使用统一资源 每个活动i都有起始时间s和一个结束时间f 活动1执行完成后活动2也可以完全执行 则活动1与活动2相容 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合 活动结束时间以升序排列 算