当前位置: 首页 > news >正文

实验:贪心算法

实验二:贪心算法

【实验目的】

应用贪心算法求解活动安排问题。

【实验性质】

验证性实验。

【实验要求】

活动安排问题是可以用贪心算法有效求解的很好的例子。

问题:有n个活动的集合A={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。

求解:安排尽量多项活动在该场地进行,即求A的最大相容子集。

设待安排的11个活动的开始时间和结束时间按结束时间的升序排列如下:

i

1

2

3

4

5

6

7

8

9

10

11

s[i]

1

3

0

5

3

5

6

8

8

2

12

f[i]

4

5

6

7

8

9

10

11

12

13

14

将此表数据作为实现该算法的测试数据。

【算法思想及处理过程】

1.定义了活动结构体Activity,包含活动的名称name、开始时间start和结束时间end。

2.定义了比较函数compare,用于按照活动的结束时间升序排序。

3.定义了一个活动安排函数activityArrangement,接受一个活动数组和活动个数作为参数,并按照活动结束时间排序后进行活动安排。

4.在活动安排函数中,首先使用sort函数对活动数组进行排序,排序规则是使用之前定义的比较函数compare。

5.输出第一个活动的信息。

6.初始化一个变量lastEnd,用于记录最后一个加入最大相容子集的活动的结束时间。

7.遍历剩下的活动数组,如果当前活动的开始时间晚于等于lastEnd,即活动不与已加入的活动冲突,将该活动加入最大相容子集,并更新lastEnd为该活动的结束时间。

8.输出结果。

在主函数中,首先获取用户输入的活动个数,然后根据输入的活动个数循环获取活动的名称、开始时间和结束时间。最后调用活动安排函数(activityArrangement)进行活动安排。

【程序代码】

#include <iostream>

#include <algorithm>

using namespace std;

struct Activity {

    int name;

    int start;

    int end;

};

bool compare(Activity a, Activity b) {

    return a.end < b.end;

}

void activityArrangement(Activity activities[], int n) {

    sort(activities, activities + n, compare);

    cout << "结果为: "<<endl;

    cout << "Activite " << activities[0].name << "=" << activities[0].start << ", " << activities[0].end <<endl;

    int lastEnd = activities[0].end;

    for (int i = 1; i < n; i++) {

        if (activities[i].start >= lastEnd) {

            cout << "Activite "<<activities[i].name <<"=" << activities[i].start << ", " << activities[i].end <<endl;

            lastEnd = activities[i].end;

        }

    }

    cout << endl;

}

int main() {

    int n;

    cout << "请输入活动个数: ";

    cin >> n;

    Activity activities[50];

    for (int i = 0; i < n; i++) {

        cout << "请输入第"<<i+1<<"次活动信息(名称 开始时间 结束时间) : ";

        cin >> activities[i].name >> activities[i].start >> activities[i].end;

    }

    activityArrangement(activities, n);

    return 0;

}

【运行结果】

自行运行截图

【算法分析】

排序算法的时间复杂度:使用了STL的sort函数对活动数组进行排序,该函数的时间复杂度为 O(nlogn),其中n为活动个数。

遍历活动数组的时间复杂度:在活动安排函数中,遍历了剩下的活动数组,时间复杂度为 O(n),其中n为活动个数。

综上,代码的时间复杂度为 O(nlogn + n),即 O(nlogn)。

相关文章:

实验:贪心算法

实验二&#xff1a;贪心算法 【实验目的】 应用贪心算法求解活动安排问题。 【实验性质】 验证性实验。 【实验要求】 活动安排问题是可以用贪心算法有效求解的很好的例子。 问题&#xff1a;有n个活动的集合A{1,2,…,n}&#xff0c;其中每个活动都要求使用同一资源&…...

Python学习笔记12 -- 有关布尔值的详细说明

一、布尔表达式 最终值为true 或者false 二、常见形式&#xff1a; 1、常量&#xff1a;true false 2、比较运算&#xff1a; and &#xff01; 3、复合运算&#xff1a; and and or 4、其他 例&#xff1a;检测闰年&#xff1a; def specialYearMine(year):if (year%4 …...

SQL-窗口函数合集

目录 1.窗口函数简介2.窗口的定义3.相关题目示例3.1 PERCENT_RANK()2346 以百分比计算排名 3.2 FIRST_VALUE()/LAST_VALUE()/NTH_VALUE()2388 将表中的空值更改为前一个值 1.窗口函数简介 MySQL 开窗函数&#xff08;Window Functions&#xff09;是 MySQL 8.0 版本引入的一个…...

2024 全球软件研发技术大会官宣,50+专家共话软件智能新范式!

2024年的全球软件研发技术大会&#xff08;SDCon&#xff09;由CSDN和高端IT咨询与教育平台Boolan联合主办&#xff0c;将于7月4日至5日在北京威斯汀酒店举行。本次大会的主题为“大模型驱动软件智能化新范式”&#xff0c;旨在探讨大模型和开源技术的发展如何引领全球软件研发…...

opencv快速安装以及各种查看版本命令

安装opencv并查看其版本&#xff0c;直接通过一个可执行文件实现。 #!/bin/bashwget https://codeload.github.com/opencv/opencv/zip/3.4 -O opencv-3.4.zip && unzip opencv-3.4.zip && cd opencv-3.4 && \mkdir build && cd build &&a…...

免费学习通刷课(免费高分)Pro版

文章目录 概要整体架构流程小结 概要 关于上一版的免费高分的学习通刷课&#xff0c;有很多人觉得还得登录太复杂了&#xff0c;然后我又发现了个神脚本&#xff0c;操作简单&#xff0c;可以后台挂着&#xff0c;但是还是建议调整速度到2倍速&#xff0c;然后找到你该刷的课&…...

线性数据结构-队列

队列&#xff08;Queue&#xff09;是一种先进先出&#xff08;First In First Out, FIFO&#xff09;的数据结构&#xff0c;它按照元素进入的顺序来处理元素。队列的基本操作包括&#xff1a; enqueue&#xff1a;在队列的末尾添加一个元素。dequeue&#xff1a;移除队列的第…...

python脚本将视频抽帧为图像数据集

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…...

Xmind导入纯文本TXT方法

最近有很多同事咨询我如何在xmind直接导入纯文本txt笔记或者思维导图呢&#xff1f; 解决办法如下&#xff1a; 1.先打开xmind随便打开一个思维导图-文件-导出-marldown 2.选中导出的markdown文件。右键-打开方式-苹果系统选择文本编辑&#xff0c;Win系统选择记事本 3.按照图示…...

深度学习在老年痴呆检测中的应用:数据集综述

深度学习在老年痴呆检测中的应用:数据集综述 引言 老年痴呆(Alzheimer’s Disease, AD)是一种神经退行性疾病,主要影响老年人,导致记忆力、认知能力和行为的逐步衰退。早期检测和诊断对于延缓疾病进展、提高患者生活质量至关重要。近年来,深度学习技术在医学影像分析和…...

【FreeRTOS】内存管理笔记

一、为什么要自己实现内存管理&#xff1f; 后续的章节涉及这些内核对象&#xff1a;task、queue、semaphores和event group等。为了让FreeRTOS更容 易使用&#xff0c;这些内核对象一般都是动态分配&#xff1a;用到时分配&#xff0c;不使用时释放。使用内存的动态管理功能&…...

【数据结构】二叉树:一场关于节点与遍历的艺术之旅

专栏引入 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我想让大家…...

arm系统中双网卡共存问题

文章目录 单网卡单独运行双网卡共存问题双网卡解决方案方案一方案二方案三验证双网卡通过网卡名获取IP通过TCP与服务端通信参考单网卡单独运行 双网卡共存问题 双网卡解决方案 方案一 https://blog.csdn.net/HowieXue/article/details/75937972 方案二 http://bbs.witech…...

IDEA创建Mybatis项目

IDEA创建Mybatis项目 第一步&#xff1a;创建库表 -- 创建数据库 create database mybatis_db;-- 使用数据库 use mybatis_db;-- 创建user表 CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARC…...

排序---快速排序

前言 个人小记 一、代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_ARR 100000 #define swap(a,b)\ {\__typeof(a) __ca;\ab,b__c;\ } #define TEST(func ,arr,l,r)\ {\int nr-l;\printf("tes…...

#08【面试问题整理】嵌入式软件工程师

前言 本系列博客主要记录有关嵌入式方面的面试重点知识,本系列已经更新的篇目有如下: ​ 1.1进程线程的基本概念 1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解 1.3 孤儿进程、僵尸进程、守护进程的概念 3.1 TCP UDP 【本篇】3.2 三次握手、四次挥手...

统计绘图 | 一行代码教你绘制顶级期刊要求配图

在分享完即可统计又可可视化绘制的优秀可视化包后(具体内容可看 统计绘图 | 既能统计分析又能可视化绘制的技能 。就有小伙伴私信问我需要绘制出版级别的可视化图表有什么快速的方法&#xff1f;“。鉴于我是一个比较宠粉的小编&#xff0c;几天就给大家推荐一个技巧&#xff0…...

[ue5]建模场景学习笔记(6)——必修内容可交互的地形,交互沙(4)

1.需求分析&#xff1a; 现在我们已经有了可以在世界内近于无限的跑动痕迹&#xff0c;现在需要对痕迹进行细化&#xff0c;包括例如当人物跳起时便不再绘制痕迹&#xff0c;以及痕迹应该存在深浅&#xff0c;应该由两只脚分别绘制&#xff0c;同时也应该对地面材质进行进一步处…...

5.2 参照完整性

5.2.1 外键约束 语法格式&#xff1a;constraint < symbol > foreign key ( col_nam1[, col_nam2... ] ) references table_name (col_nam1[, col_nam2...]) [ on delete { restrict | cascade | set null | no action } ] [ on update { restrict | cascade | set nu…...

SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析

目录 SpringCache 缓存 环境配置 1&#xff09;依赖如下 2&#xff09;配置文件 3&#xff09;设置缓存的 value 序列化为 JSON 格式 4&#xff09;EnableCaching 实战开发 Cacheable CacheEvict CachePut Caching CacheConfig SpringCache 的优势和劣势 读操作…...

数据结构 —— 堆

1.堆的概念及结构 堆是一种特殊的树形数据结构&#xff0c;称为“二叉堆”&#xff08;binary heap&#xff09; 看它的名字也可以看出堆与二叉树有关系&#xff1a;其实堆就是一种特殊的二叉树 堆的性质&#xff1a; 堆中某个结点的值总是不大于或不小于其父结点的值&…...

【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用

update-alternatives 是一个在 Debian 及其衍生发行版中&#xff08;包括 Ubuntu&#xff09;用于管理系统中可替代项的命令。它可以用于在系统中设置默认的软件版本&#xff0c;例如在不同版本的软件之间进行切换&#xff0c;比如不同的 Python 版本。 要在 Ubuntu 中使用 up…...

2024 年适用于 Linux 的 5 个微软 Word 替代品

对于那些最近由于隐私问题或其他原因而转向 Linux 的用户来说&#xff0c;可能很难替换他们最喜欢的、不在 Linux 操作系统上运行的应用程序。 寻找流行程序的合适替代品可能会成为一项挑战&#xff0c;而且并不是每个人都准备好花费大量时间来尝试弄清楚什么可以与他们在 Win…...

大模型日报2024-06-12

大模型日报 2024-06-12 大模型资讯 NVIDIA发布GB200 Grace Blackwell AI超级芯片 摘要: NVIDIA近日宣布推出GB200 Grace Blackwell超级芯片和Blackwell B200 GPU&#xff0c;这些新技术将推动人工智能领域的发展。 阿布扎比TII发布下一代Falcon语言模型 摘要: 阿布扎比的技术创…...

LVGL欢乐桌球游戏(LVGL+2D物理引擎学习案例)

LVGL欢乐桌球游戏&#xff08;LVGL2D物理引擎学习案例&#xff09; 视频效果&#xff1a; https://www.bilibili.com/video/BV1if421X7DL...

国产数字证书大品牌——JoySSL

一、品牌介绍 网盾安全旗下品牌JoySSL是专业的https安全方案服务商&#xff0c;业务涉及网络安全技术服务、安全防护系统集成、数据安全软件开发等。网盾安全以网络安全为己任&#xff0c;携手GlobalSign、DigiCert 、Sectigo等全球数家权威知名SSL证书厂商&#xff0c;加速ht…...

Codeforces Global Round 26 D. “a“ String Problem 【Z函数】

D. “a” String Problem 题意 给定一个字符串 s s s&#xff0c;要求把 s s s 拆分成若干段&#xff0c;满足以下要求&#xff1a; 拆分出来的每一个子段&#xff0c;要么是子串 t t t&#xff0c;要么是字符 a a a子串 t t t 至少出现一次 t ≠ " a " t \ne…...

Next.js 加载页面及流式渲染(Streaming)

Next.js 加载页面及流式渲染&#xff08;Streaming&#xff09; 在现代的 Web 应用开发中&#xff0c;用户体验是至关重要的。快速响应的页面加载和流畅的用户界面可以显著提升用户的满意度。而加载页面&#xff08;Loading Page&#xff09;和流式渲染&#xff08;Streaming&…...

形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现

背景&#xff1a; 新手在学习Python时可能会出现如下图所示的报错 下面分情况教大家如何解决 视频教程【推荐】&#xff1a; 形如SyntaxError: EOL while scanning string literal&#xff0c;以红色波浪线形式在Pycharm下出现 过程&#xff1a; 问题概述&#xff1a; 简单…...

DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门

场景 DockerCompose中部署Jenkins&#xff08;Docker Desktop在windows上数据卷映射&#xff09;&#xff1a; DockerCompose中部署Jenkins&#xff08;Docker Desktop在windows上数据卷映射&#xff09;-CSDN博客 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代…...

网站加地图标记/百度资源

关于地址转换 在计算机操作系统中&#xff0c;地址转换是存储管理的一个主要功能。所谓地址转换就是将用户的逻辑地址转换成内存的物理地址&#xff0c;完成地址重定位。需要指出的是&#xff0c;地址转换是操作系统的地址变换机构自行完成的&#xff0c;无需用户干预&#xff…...

长春做网站优化/淘宝关键词排名优化

初次接触这两个接口也许会混淆&#xff0c;其实接口的命名就是对功能的绝佳描述&#xff0c;resize就是重新分配大小&#xff0c;reserve就是预留一定的空间。这两个接口即存在差别&#xff0c;也有共同点。下面就它们的细节进行分析。 为实现resize的语义&#xff0c;res…...

潼关县住房和城乡建设局网站/优化神马网站关键词排名价格

早期的计算机是用来进行军事上枪炮的弹道计算和火力表的测试的&#xff0c;计算机俗称电脑&#xff0c;是一种用于高速计算的电子计算机器&#xff0c;可以进行数值计算&#xff0c;又可以进行逻辑计算&#xff0c;还具有存储记忆功能。计算机是能够按照程序运行&#xff0c;自…...

wordpress修改html代码/域名查询系统

在windows服务器中布置了一个项目&#xff0c;测试阶段发现thinkphp5.0框架下运行出现了验证码无法显示、json数据格式前面有一个红点。 直接在返回结果之前&#xff0c;执行一下ob_clean(); 完美解决问题。...

厦门网站建设公司哪个好/外贸网络推广怎么做

据说2015年约有120亿台设备连上网络&#xff0c;到了2020年会有超过250亿台设备连网&#xff0c;不过以最近的发展来看&#xff0c;从物联网到车联网&#xff0c;以及无人机等新的连网应用如雨后春笋般地冒出&#xff0c;2020年后连上互联网的装置应该会远远超过250亿个设备。诚…...

江西南昌网站定制/网页设计用什么软件做

备忘录&#xff0c;整理逻辑关系 步骤 1. 打开configuration 2. 配置 configuration 这个root path是远程绝对路径 3. 配置mapping 4. 配置系统的编辑器 这个路径 使用 which python 找。 6. 查看远程目录 7. 下载远程目录代码 8. 打开代码自动同步 9. 填写configuration…...