算法设计与分析——贪心算法——活动安排问题

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

贪心算法总是做出在当前看来是最好的选择,也就是说,贪心算法并不从整体最优上加以考虑,所做出的的选择只是某种意义上的局部最优选择;
虽然贪心算法不是对所有的问题都能得到整体最优解,但对范围相当广的许多问题都能产生最优解,即使贪心算法不能得到整体最优解,但其最终结果却是最终结果却是最优解的很好的近似解

在这里插入图片描述

在这里插入图片描述
将活动按照结束时间进行从小到大排序。然后用i代表第i个活动,s[i]代表第i个活动开始时间,f[i]代表第i个活动的结束时间。按照从小到大排序,挑选出结束时间尽量早的活动,并且满足后一个活动的起始时间晚于前一个活动的结束时间,全部找出这些活动就是最大的相容活动子集合。

#include<iostream>
using namespace std;void activity_arrangement(int n,int start[],int final[],bool result[])
{		//先按活动的结束时间排好序 int temp;result[1]=true;temp=1;for(int i=2;i<=n;i++){if(final[temp]<=start[i]){result[i]=true;temp=i;}else{result[i]=false;}}}int main()
{int n;cout<<"输入活动的个数:";cin>>n; int start[n+1];int final[n+1];cout<<"输入活动的开始时间序列:";for(int i=1;i<=n;i++){cin>>start[i];}cout<<"输入活动的结束时间序列:";for(int i=1;i<=n;i++){cin>>final[i];}bool result[n+1];activity_arrangement(n,start,final,result);for(int i=1;i<=n;i++){cout<<result[i]<<" ";}return 0;} 

在这里插入图片描述
改进:能够自动进行排好结束时间

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;typedef struct Node
{int start;int final;
}node;bool cmp(node x,node y)
{if(x.final<y.final)return true;elsereturn false;
}
void activity_arrangement(int n,int start[],int final[],bool result[])
{		//先按活动的结束时间排好序 Node node[n+1];for(int i=1;i<=n;i++){node[i].start=start[i];node[i].final=final[i];}sort(node+1,node+n+1,cmp);for(int i=1;i<=n;i++){start[i]=node[i].start;final[i]=node[i].final;}int temp;result[1]=true;temp=1;for(int i=2;i<=n;i++){if(final[temp]<=start[i]){result[i]=true;temp=i;}else{result[i]=false;}}}int main()
{int n;cout<<"输入活动的个数:";cin>>n; int start[n+1];int final[n+1];cout<<"输入活动的开始时间序列:";for(int i=1;i<=n;i++){cin>>start[i];}cout<<"输入活动的结束时间序列:";for(int i=1;i<=n;i++){cin>>final[i];}bool result[n+1];activity_arrangement(n,start,final,result);for(int i=1;i<=n;i++){cout<<result[i]<<" ";}return 0;} 

在这里插入图片描述
自动排序的

#include<iostream>
#include<algorithm>
using namespace std;typedef struct Node
{int starttime;int finaltime;}node;bool cmp(node a, node b){return (a.finaltime<b.finaltime);}void activity_arrangement(int n,Node node[],bool result[])
{		//先按活动的结束时间排好序 sort(node+1,node+n+1,cmp);int temp;result[1]=true;temp=1;for(int i=2;i<=n;i++){if(node[temp].finaltime<=node[i].starttime){result[i]=true;temp=i;}else{result[i]=false;}}}int main()
{int n;cout<<"输入活动的个数:";cin>>n; Node node[n+1];cout<<"输入活动的开始和结束的时间序列:"<<endl;for(int i=1;i<=n;i++){cin>>node[i].starttime>>node[i].finaltime;}cout<<"活动的开始和结束的时间序列:"<<endl;for(int i=1;i<=n;i++){cout<<"["<<i<<"]:"<<"("<<node[i].starttime<<","<<node[i].finaltime<<")"<<endl;}bool result[n+1];activity_arrangement(n,node,result);cout<<"安排的活动为:"<<endl; int num=0;for(int i=1;i<=n;i++){if(result[i]==1){	num++;cout<<"["<<i<<"]:"<<"("<<node[i].starttime<<","<<node[i].finaltime<<")"<<endl;		}						}cout<<"可以安排的活动个数为:"<<num<<endl;return 0;} 

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 C# 中的 Action, Func,Predicate

译文链接&#xff1a;https://www.infoworld.com/article/3057152/how-to-work-with-action-func-and-predicate-delegates-in-csharp.html?nsdrtrue委托是一个类型安全的函数指针&#xff0c;它可以引用与委托具有相同签名的方法。委托常用于实现回调方法或者事件机制&#x…

python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...

我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是&#xff1a;a)从文本文件中读取微分方程组b)解决系统问题我已经阅读了this question和this other question,它们几乎就是我要找的,但我还有一个额外的问题&#xff1a;我事先并不知道方程组的形式,所以…

c语言——刷新控制台界面与返回上一级

#include<iostream> #include<stdlib.h> using namespace std;int main() {while(1){system("cls");//刷新控制台程序界面 cout<<"请输入1&#xff1a;进入下一级程序A:"<<endl;cout<<"请输入2&#xff1a;进入下一级程…

C# :异步编程的注意点

在上一篇《C#&#xff1a;异步编程中的 async 和 await》 中简单介绍了在 C# 中的异步编程以及 async 和 await 编程模型&#xff0c;本文介绍下异步编程的注意事项&#xff0c;主要有以下几个方面。同步中调用异步在同步代码中调用异步代码&#xff0c;容易导致死锁&#xff0…

makefile 打印变量_[Makefile] 缩进与空格--记录踩过的坑

今天折腾了好久&#xff0c;就为了debug两个makefile的bug。虽然最后找到原因了&#xff0c;但是&#xff0c;怎么说呢&#xff0c;用现在流行的话来说&#xff0c;实在是意难平啊&#xff01;必须写一篇记录一下&#xff01;第一个问题&#xff0c;是个语法高亮问题。今天观察…

算法设计与分析——贪心算法——背包问题

0-1背包问题&#xff1a; 前提&#xff1a;给定n种物品和一个背包。物品i的重量是Wi&#xff0c;其价值为Vi&#xff0c;背包的容量为C。 问题&#xff1a;应如何选择装入背包的物品&#xff0c;使得装入背包中物品的总价值最大? 背包问题&#xff1a; 与0-1背包问题类似&…

python函数模块化教程_【软件测试教程】Python模块化以及内置模块的使用

一&#xff1a;什么是模块模块是一个包含所有你定义的函数和变量的文件&#xff0c;其后缀名是.py。模块可以被别的程序引入&#xff0c;以使用该模块中的函数等功能。二&#xff1a;模块类型1&#xff1a;自定义模块由编程人员自己写的模块。自定义模块时要注意命名&#xff0…

企业级精致 Blazor 套件 BootstrapBlazor 介绍

BootstrapBlazor1、前言 Blazor 作为一种 Web 开发的新技术已经发展有一段时间了&#xff0c;有些人标称 无 JS 无 TS&#xff0c;我觉得有点误导新人的意味&#xff0c;也有人文章大肆宣传 Blazor 是 JavaScript 的终结者&#xff0c;是为了替代 JavaScript 而生的&#xff0c…

算法设计与分析——贪心算法——最优装载问题

有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下&#xff0c;将尽可能多的集装箱装上轮船。 #include<iostream> #include<algorithm> #include<cstring> using namespace std;typedef str…

AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承

AgileConfig轻量级配置中心自第一个版本发布不知不觉已经半年了。在并未进行什么推广的情况下收到了250个star&#xff0c;对我有很大的鼓舞&#xff0c;并且也有不少同学试用&#xff0c;并且给出了宝贵的意见&#xff0c;非常感谢他们。其中有一些意见非常好&#xff0c;但是…

python getopt模块_python之getopt模块使用

实用方向&#xff1a;处理命令行参数的一个方法&#xff0c;简单好用。方法&#xff1a;getopt模块总共有2个函数&#xff0c;分别为&#xff1a;getopt.getoptgetopt.gnu_getopt简单使用&#xff1a;getopt这个函数常用&#xff0c;简单看一下这个函数的使用&#xff1a;getop…

算法设计与分析——贪心算法——多机调度问题

该类问题可以使用贪心策略可以设计出较好的近似算法&#xff08;并不是最优解&#xff09; #include<stdio.h> #include<stdlib.h> #include<iostream> #include<algorithm> using namespace std;typedef struct Node {int hour;//记录该作业的所需要…

如何在 C# 中使用 Dapper ORM

译文链接&#xff1a;https://www.infoworld.com/article/3025784/how-to-use-the-dapper-orm-in-c.html?nsdrtrue对象关系映射&#xff08;ORM&#xff09;这个概念已经存在很长时间了&#xff0c;ORM的作用就是用来解决 编程领域的 object model 和关系数据库中的 data mode…

从像素坐标到相机坐标_鱼眼相机模型EUCM(一)

前言相较于普通的针孔相机&#xff0c;鱼眼相机的能够观测到的范围更广&#xff0c;在一定程度上其实是可以增强视觉的鲁棒性的。针对于鱼眼相机的模型其实有挺多的&#xff0c;也有论文对这些模型进行了评测&#xff0c;但对于本人来说&#xff0c;最熟知的还是针孔模型&#…

GraphQL:简单开开始一个查询

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

算法设计与分析——回溯法——批处理作业调度

问题描述&#xff1a;给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理&#xff0c;然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度&#xff0c;设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度…

python输入日期计算天数_用python计算日期(1、返回指定日期所在的一周,2,计算一个日期的月份和天数加减)...

放两个小轮子吧&#xff0c;欢迎测试bug&#xff0c;然后告诉我&#xff1a;1、返回指定日期所在的一周2&#xff0c;计算一个日期的月份和天数加减# -*- coding: utf-8 -*-"""Created on Tue May 17 17:11:28 2016author: pcloth关于日期的计算轮子""…

探索.NET平台中的SIMD内在函数Vector

概述Vector&#xff08;向量&#xff09;是一种序列式容器&#xff0c;事实上和数组差不多&#xff0c;但它比数组更优越。一般来说数组不能动态拓展&#xff0c;因此在程序运行的时候不是浪费内存&#xff0c;就是造成越界。而Vector刚好弥补了这个缺陷&#xff0c;它的特征是…

算法设计与分析——回溯法——装载问题

0027算法笔记——【回溯法】回溯法与装载问题 自己写的代码&#xff1a; #include <iostream> using namespace std; template <class Type> class Loading {//friend Type MaxLoading(Type[],Type,int,int []);//private:public:void Backtrack(int i);int n, …

python功能函数_Python-功能函数的使用

Python中的函数提供了有组织的&#xff0c;可重用的代码来执行一组操作。函数简化了编码过程&#xff0c;防止冗余逻辑&#xff0c;并使代码更容易遵循。定义和调用简单函数使用def语句来定义Python中的函数最常见的方式。这种说法是所谓的单条复合语句的语法如下&#xff1a;d…