多处最优服务次序问题——算法设计与分析(C实现)

news2024/11/28 11:34:44

    问题描述:设有n个顾客同时等待一项服务。顾客i需要的服务时间为t_{i}(1\leq i\leq n),共有s处可以提供此项服务。应该如何安排n个顾客的服务次序,才能使平均等待时间达到最小?平均等待时间是n个顾客的等待服务时间的总和除以n。

    算法设计:对于给定的n个顾客需要的服务时间和s的值,计算最优服务次序。

    数据输入:由文件input.txt给出输入数据。第1行有2个正整数n和s,表示有n个顾客且有s处可以提供服顾客需要的服务。接下来的1行中有n个正整数,表示n个顾客需要的服务时间。

    结果输出:将计算的最小平均等到时间输出到文件output.txt。

基本思想:

  • 该题是贪心算法的典型,只需要将所有的任务按照截至时间递增进行排序,然后将任务逐个分配给每一个服务器。即将等待的人逐个分配到每一个服务处。
  • 重在于统计每一个任务等待时间,然后计算平均等待时间
  • 需要注意的是,这里的等待时间是相对于完成任务的时间点,等待时间包括完成任务所花费的时间和等待分配到的时间,即等待时间=执行时间+执行前等待分配的时间

具体代码实现如下:

#include<stdio.h>

//选出当前等待时间最小的服务处 
int SelectMin(int* wait,int s)
{
    int min = wait[0];
    int index = 0;
    for (int i = 0; i < s; i++) 
	{
        if (min > wait[i]) 
		{
            min = wait[i];
            index = i;
        }
    }
    return index;
}

//安排顾客,计算平均等待时间 
int Greedy(int* wait, int *arr, int n,int s) 
{
    int sum = 0;
    int index;
    for (int i = 0; i < n; i++) 
	{
        index = SelectMin(wait, s);
        wait[index] += arr[i];
        sum += wait[index];
    }
    return sum / n;	
}

//对顾客的执行时间进行从小到大的排序 
void sort(int* arr,int n)
{
	int temp;
	 for(int i=0;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
                if(arr[j]>arr[j+1])
                {
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                    }
             }
        }
}


int main()
{
    int n,s,res;
    
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    
    scanf("%d %d",&n,&s);//从文件中取出顾客人数和服务处数量 
    
    int wait[s];
    int arr[n];
    
    for(int i=0;i<n;i++)
    {
    	scanf("%d",&arr[i]);
	}
    
    sort(arr, n);		
    res= Greedy(wait, arr, n, s);

     printf("%d",res);
    return 0;
}

现在让我们来检验一下代码的正确性:

(1)首先在程序所在路径下建立两个题目所需要的文本文件:input.txt  output.txt

(2)在input.txt文件中输入相关数据:

(3)将代码运行起来,下图为代码运行成功的标志:

 (4)那么接下来我们进入输出文件output.txt,查看代码运行的具体效果

 

  

   经过检验发现,该代码实现的该实例时正确的,大家可以对其他实例进行一个验证,也可可以将代码自行更改,增加其可行性~

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

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

相关文章

数据库软件基础搭建的思考(WAMPserver)

本文的目的是介绍关于构建个人小型医学数据库的软件基础方面的一些实践和思考&#xff0c;做到局域网访问&#xff0c;乃至外网访问。 wampserver简要介绍 WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以及MySQL数据库的整合软件包。它可以在Windows操作系统…

设备联网调试三板斧

在实际的工业互联网项目中&#xff0c;设备联网所占的比重越来越大。有的一期项目为了简单快速上线&#xff0c;让客户直观体会到工业互联网的效果&#xff0c;直接会把设备联网放在一期项目的重点。那么在做此类项目时&#xff0c;设备联网调试就显得尤为重要。专业的厂家和工…

DosBox在winserver2016云桌面最大化界面无法铺满全屏的问题剖析

现象引出和问题猜想 有一款用户软件叫DosBox&#xff0c;在实体机win11的时候最大化的时候&#xff0c;程序界面可以铺满全屏&#xff0c;但是在winserver2016云桌面进行最大化的时候&#xff0c;最大化的时候&#xff0c;界面无法铺满全屏&#xff1a; &#xff08;实体机最大…

递归到动态规划:省去枚举行为

如果在动态规划的过程中没有枚举行为&#xff0c;那严格位置依赖和傻缓存的方式并没有太大区别&#xff0c;但是当有枚举行为的时候&#xff08;一个位置依赖于多个位置&#xff09;&#xff0c;那严格位置依赖是有优化空间的&#xff0c;枚举行为也许可以省去&#xff0c;题目…

Docker(一)

Docker Docker简述 传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统&#xff0c;创建虚拟机&#xff08;虚拟出各种硬件&#xff09;&#xff0c;在虚拟机上安装从操作系统&#xff0c;在从操作系统中安装和部署各种应用。这种方式占用资源很大并且步骤冗余。在此基础之…

跟着LearnOpenGL学习2--三角形绘制

文章目录 一、前言二、图形渲染管线2.1、顶点数据2.2、顶点着色器2.3、形状&#xff08;图元&#xff09;装配2.4、几何着色器2.5、光栅化2.6、片段着色器2.7、测试与混合 三、渲染流程3.1、顶点输入3.2、顶点着色器3.3、编写、编译着色器3.4、片段着色器3.5、着色器程序3.6、链…

专业专注,极致体验,高端隐形智能晾衣机品牌邦先生官宣浙江卫视知名主持人沈涛为品牌代言人

5月11日&#xff0c;高端隐形晾衣架领导品牌邦先生正式宣布&#xff0c;浙江卫视知名主持人沈涛为品牌代言人&#xff0c;以更高标准的晾晒&#xff0c;共同迎接智能晾晒大时代&#xff0c;用科技力量创造美好智慧家居生活。 专业实力品牌邦先生王牌主持沈涛 作为浙江卫视的“王…

GPT Prompt(提示词)写法与教程,相关站点与工具

文章目录 1、Prompt工程师&#xff08;提示工程师&#xff09;2、提示词教程3、提示词工具&#xff08;中文&#xff09;4、提示词工具&#xff08;英文&#xff09; 1、Prompt工程师&#xff08;提示工程师&#xff09; Prompt工程师&#xff0c;也称为AI提示工程师&#xff…

纸质文件怎么扫描成电子版?简单小妙招快来拿捏

随着科技的发展&#xff0c;越来越多的人将纸质文件转换为电子版&#xff0c;以方便存储和共享。本文将介绍纸质文件如何扫描成电子版&#xff0c;以及如何利用手机进行扫描转换。 纸质文件扫描成电子版 将纸质文件扫描成电子版是一种常见的方式。首先&#xff0c;您需要一台扫…

JAVA-代码块和内部类

文章目录 目录 文章目录 前言 1.代码块 1.1什么是代码块? 1.2代码块的分类及作用: 1.静态代码块 2.成员代码块(又叫做构造代码块) 3.局部代码块 2.内部类 2.1 什么是内部类? 2.2 内部类的分类 1.成员内部类 2.静态内部类 3.匿名内部类 4.局部内部类 总结 前言 作者简介:我是最…

MySQL索引优化(超详细)

Mysql索引优化 1 索引介绍 1.1 什么时MySQL的索引 ​ MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 ​ MySQL在存储数据之外&#xff0c;数据库系统中还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种引用(指向)表中的数据&#xff…

Prometheus

Prometheus简介 prometheus是一个监控、告警的开源系统。Prometheus收集并存储时序的指标数据。指标数据存储伴随一个timestamp和可选择key-values 队列标签 Prometheus特性&#xff1a; 一个时序的多维数据模型&#xff0c;被mertic name和 key/value pairs标签唯一定义 P…

将DenseNet换成Resnet——更换深度学习骨干网络

最近我在学习一个手写公式识别的网络&#xff0c;这个网络的backbone使用的是DenseNet&#xff0c;我想将其换成ResNet 至于为什么要换呢&#xff0c;因为我还没换过骨干网络&#xff0c;就像单纯拿来练练手&#xff0c;增加我对网络的熟悉程度&#xff0c;至于会不会对模型的性…

【时间序列数据挖掘】ARIMA模型

目录 0、前言 一、移动平均模型MA 二、自回归模型AR 三、自回归移动平均模型ARMA 四、自回归移动平均模型ARIMA 【总结】 0、前言 传统时间序列分析模型&#xff1a; ARIMA模型是一个非常灵活的模型&#xff0c;对于时间序列的好多特征都能够进行描述&#xff0c;比如说平…

5.11黄金最新行情走势分析及多空交易策略

近期有哪些消息面影响黄金走势&#xff1f;本周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;北京时间周三(5月10日)20:30&#xff0c;美国劳工部公布4月通胀报告&#xff0c;整体与核心CPI年率都走低&#xff0c;支持美联储6月份保持利率不变。数据显示&…

RabbitMQ详解(一):Linux安装

消息队列概念 消息队列是在消息的传输过程中保存消息的容器。队列的主要目的是提供路由并保证消息的传递&#xff1b;如果发送消息时接收者不可用&#xff0c;消息队列会保留消息&#xff0c;直到可以成功地传递它。 常见的消息队列 RabbitMQ 基于AMQP(高级消息队列协议)基础上…

不要轻易放弃丢失的U盘文件夹数据,这里有按文件夹恢复数据的技巧

U盘&#xff0c;全名叫USB闪存盘&#xff0c;是一种便携式的存储设备&#xff0c;是一种可以插入到电脑等电子设备上进行数据传输和存储的硬件设备。U盘的使用方便、速度高、存储容量大、稳定性高&#xff0c;因此被广泛用于数据备份、文档传输、音频视频存储等方面。但是使用过…

easyrecovery免费版2023最新电脑数据恢复软件

通常&#xff0c;许多人会将工作或生活中的数据存储在我们的计算机上。很多时候&#xff0c;由于我们的误操作或其他一些问题&#xff0c;很容易错误地删除一些文件和数据。特别是&#xff0c;一些计算机故障总是会导致数据丢失&#xff0c;这是非常麻烦的。当需要重新安装系统…

【TA100】5 纹理的秘密

1 是什么&#xff1f; 2 为什么使用纹理 3 纹理管线 纹理投影 展开UV到UV坐标系 模型坐标> uv坐标 > 乘分辨率(256 256) > 颜色采样 4 纹理模式 重复&#xff0c;镜像重复&#xff0c;边界拉伸&#xff0c;填充颜色 5 采样模式 它决定了当纹理由于变换而产生拉伸时&a…

go小技巧(易错点)集锦

目录 len的魔力评论区大佬解答答案详解 结构体是否相等答案解析&#xff1a;结构体比较规则举例 常量的编译我的答案标准答案内存四区概念&#xff1a; new关键字答案 iota的魔力结果解析可跳过的值定义在一行中间插队 小结iota详解iota 原理iota 规则依赖 const按行计数多个io…