1.8 小飞的电梯调度算法
题目:有一栋楼,如今设计一种电梯调度算法:电梯在一楼让大家上电梯,然后依据大家选择要到的楼层算出某一楼层i,电梯在i层停下让全部人下电梯,然后大家爬楼梯达到自己的楼层。请问电梯停在哪一层。能够使得这一次的全部乘客爬楼层之和最短?
(一)
最直接最简单的方法就是直接枚举从第一层到最后一层,然后算出电梯停在哪一层会使得全部乘客爬楼层之和最短。
代码例如以下:
int nPerson[]; //nPerson[i]表示到第i层的乘客的数目
int nFloor = 0, nMinFloor = 0;
int nTargetFloor = -1;
for(int i = 1; i <= N; ++i) { //N代表楼层的总数for(int j = 1; j < i; ++j) nFloor += nPerson[j] * (i - j);for(int j = i + 1; j <= N; ++j) nFloor += nPerson[j] * (j - i);if(nTargetFloor == -1 || nFloor < nMinFloor) {nMinFloor = nFloor;nTargetFloor = i;}
}
(二)
思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y. 如果有N1个乘客要到达的层数<i,有N2个乘客要到达的层数==i,有N3个乘客要到达的层数>i. 所以有: (1)当电梯改停在i-1,则 Y+(N2+N3-N1) (2)当电梯改停在i+1,则 Y+(N1+N2-N3) 所以当后面那部分的值<0时(如(2)的N1+N2<N3),则加上负数后总的楼梯数比原来的小,即更优解. 因此,我们能够从第一层開始,用以上策略,考察N1,N2,N3的值,依次调整以得到最优解.
int nPerson[]; //nPerson[i]表示到第i层的乘客的数目
int nFloor = 0, nMinFloor = 0;
int nTargetFloor = 1;
int N1 = 0, N2 = 0, N3 = 0;
for(N1 = 0, N2 = nPerson[1], N3 = 0, i = 2; i <= n; ++i) { //n代表楼层的数目N3 += nPerson[i];nMinFloor += nPerson[i] * (i - 1);
}
for(int i = 2; i <= n; ++i) {if(N1 + N2 < N3) {nTargetFloor = i;nMinFloor += (N1 + N2 - N3);N1 += N2;N2 = nPerson[i];N3 -= nPerson[i];}else break;
}
转载于:https://www.cnblogs.com/gccbuaa/p/6872531.html
1.8 小飞的电梯调度算法相关推荐
- 编程之美 1.8 小飞的电梯调度算法
小飞的电梯调度算法 电梯是我们每天都要坐的,上班高峰期是非常拥挤的,大家都不想每层都停,决定选择一层停,剩下的楼层大家自己爬.假设电梯共有N层,坐电梯的人有M人,每个人都有自己的目的层,现在让你设计一 ...
- 小飞的电梯调度算法,光影切割问题编程之美
小飞的电梯调度算法: 1.8问题描述: 小飞是实习程序员,下班高峰期时电梯的每层都有人上下,等电梯是件烦人的事情. 小飞有个方案:电梯每次计算里面的人,和上的楼层,从而统计出在哪一层停,该上楼的出电梯 ...
- 编程之美----小飞的电梯调度算法
原帖地址:http://blog.csdn.net/li4951/article/details/7486092 亚洲微软研究院所在的希格玛大厦一共有6部电梯.在高峰时间,每层都有人上下,电梯每层都停 ...
- java 电梯算法_编程之美之小飞的电梯调度算法(多种解法)---Java语言
1.题目情景 我们假设都是从一楼上电梯的,而至于讯电梯停在其中的某一层.即所有的乘客都从一楼上电梯,到达某层之后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层.在一楼的时候,每个乘客选择自己的目的 ...
- 编程之美1.8:小飞的电梯调度算法
问题:由于楼层并不高,在繁忙时段,每次电梯从一层往上走时,我们只允许停到其中某一层.所有乘客再从这层去往自己的目的楼层. 电梯停在哪一层,能够保证乘客爬楼梯之和最少? import java.util ...
- c语言 电梯调度,c语言函数如何返回两个值或多个值(结合 小飞 电梯调度算法)...
正常思维:使用return 语句,但每调用一次函数 return 语句只能返回一个值 .这是C语言语法规则. 该怎么实现一个函数返回两个值或是多个值?,可以采用"间接方法".大概有 ...
- 电梯调度算法 软工 Pair Project
软工要求的结对编程,随机分组,然后,我(郭立轩)和六班的闫生辉分在了同一组.之前并不认识,虽然如此,这次结对编程的经历还是相当愉快的,也学到了不少东西. OK,下面进入正文 关于结对编程 如何利用结对 ...
- 编程之美---小飞的电梯调度问题 1.8 扩展2
http://blog.163.com/guixl_001/blog/static/41764104201082062317857/ 问题.有一栋楼,一共有N层,要去每一层的人分别是A[1],A[2] ...
- 我们的电梯调度算法的独到之处
我们的算法里,定义了_PassengerQueue专门用于存储乘客发出的方向请求,还定义了一个ArrayList数组_targetOfElev用于存储每个电梯的目标楼层.把每个楼层里发出的方向请求相同 ...
最新文章
- 元素序列几个常用排序算法:一
- 12.2.12 创建有响应的用户界面 捕获异常
- python opencv直方图_【python opencv】直方图均衡
- android 倒计时封装,react native中的聊天气泡及timer封装成的发送验证码倒计时
- 11月25号站立会议
- 数据存储与传输---编码与解码---硬盘和内存要分清!
- Oracle 10gR2 Psu 相关
- Linux定时发送arp,linux-networking – Keepalived定期发送免费ARP
- 系统学习机器学习之SVM(一)
- 将一个数据插入表中前校验数据是否存在
- 使用jQuery快速高效制作网页交互特效(1)
- 编译原理第四章课后题
- 信源编码与信道编码区别(十一)
- 短除法对一个数分解质因数
- spyder pyecharts不显示_后期剪辑还在升级主机配置?换台京东方显示器才最重要...
- 浅谈WMS系统(SAP WMS系统及非SAP的WMS系统)
- OC底层 - runtime 一个char变量按位保存多个BOOL变量值
- OPENCV CV_64FC1含义
- 在深度学习模型的优化上,梯度下降并非唯一的选择
- 给你一个赶超三大交易所的机会 | 你好2020