关闭

电梯调度算法

标签: 算法
1406人阅读 评论(0) 收藏 举报
分类:
  • 一栋楼有6层,现在设计一种电梯调度算法:电梯在一楼让大家上电梯,然后根据大家选择要到的楼层算出某一楼层i,电梯在i层停下让所有人下电梯,然后大家爬楼梯达到自己的楼层。请问电梯停在哪一层,可以使得这一次的所有乘客爬楼层之和最短?
  • dp算法:假设停在i层,有N1个人在i层之下,N2个人在i层,N3个人在i层之上,若电梯停在i + 1层,则爬楼层总和需要增加 N1 + N2 - N3层,若N1 + N2 - N3小于0,则i + 1层爬楼总和更小。所以按照这个思路,时间复杂度为O(N)。
    动态规划法只需要一次不满足N1 + N2 - N3<0就可以退出的原因是:假设再上一层,则N1’=N1+N2,N2’=nperson[i+1],N3’=N3-nperson[i+1]。则N1’+N2’-N3’=N1 + N2 - N3+2*nperson[i+1]>=N1 + N2 - N3,以此类推…..因此越上则需要走的层数越多。
#include <vector>
using namespace std;
//for return
struct Floor{
    int targetFloor;
    int nMinFloor;
    Floor(int _targetFloor, int _nMinFloor) :
        targetFloor(_targetFloor), nMinFloor(_nMinFloor){}
};

//传入参数如果有5层的话,那么数组的大小是6,注意
Floor getFloor(vector<int> nPerson)
{
    int targetFloor = 1;
    int totalFloor = 0;
    int n1, n2 = nPerson[1], n3 = 0;
    int sz = nPerson.size();
    for (int i = 2; i < sz; ++i){
        n3 += nPerson[i];
        totalFloor += nPerson[i] * (i - 1);
    }
    int i;
    for (i = 2; i < sz; ++i){
        if (n1 + n2 < n3){
            totalFloor += (n1 + n2 - n3); //减去相应的层数
            n1 += n2;
            n2 = nPerson[i];
            n3 -= nPerson[i];
        }
        else
            break;
    }
    return Floor(i - 1, totalFloor);
}
0
0
查看评论

编程之美---电梯调度算法

编程之美---电梯调度算法
  • Jarvan_Song
  • Jarvan_Song
  • 2016-08-24 21:55
  • 4103

电梯调度算法---SCAN算法

扫描(SCAN)调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。采用这种调度算法,需要为访问者设置两个队列,根据磁头的移动方向,能访问到的访问者由近及远排队,背离磁头移动方向的访问者也由近及远排为另一队。先...
  • u012116457
  • u012116457
  • 2014-06-11 11:49
  • 4382

编程之美——小飞的电梯调度算法之新解

亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法: 由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电...
  • li4951
  • li4951
  • 2012-04-22 10:56
  • 3776

电梯调度算法问题

1.传统电梯调度算法 1.1先来先服务算法(FCFS) 先来先服务(FCFS-First Come First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。它根据乘客请求乘坐电梯的先后次序进行调度。此算法的优点是...
  • Cynthiatsjclg
  • Cynthiatsjclg
  • 2015-07-25 14:16
  • 946

linux磁盘请求电梯调度算法研究

1.电梯简介             电梯调度算法主要适用于INUX I/O磁盘请求调度。磁盘结构如下图所示,磁盘主要由盘面和磁头组成。磁盘每次进读写请求时,需要给磁盘驱动器一个地址,磁盘驱动器根据给定地址计算出相应的扇区,然...
  • mml1106
  • mml1106
  • 2017-08-18 11:46
  • 174

趣味算法题——电梯调度问题

电梯调度问题
  • buyoufa
  • buyoufa
  • 2016-08-21 20:18
  • 2338

编程之美--小飞--电梯调度算法 java实现

public class AptElevator {          /**       * 编程之美 ...
  • qiangzi9009
  • qiangzi9009
  • 2013-10-05 11:15
  • 3205

电梯调度算法——编程之美

编程之美------电梯调度算法 2011-06-02 15:24 一座大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯在每层都停。 实习生小飞常常会被每层都停的电梯弄得很不耐烦,于是他提出了这样的一个办法: 由于楼层并不太高,那么在繁忙的上下班时间,每次...
  • baoendemao
  • baoendemao
  • 2014-11-18 14:20
  • 1520

简单电梯调度算法模拟

经常在公司坐电梯,由于楼层较高,是双联装的电梯,但是经常等电梯很久,经常有人骂写电梯调度算法的。回来闲来无事,自己尝试写了一个简单的。场景很简单,每一层电梯口只有一个按钮,不区分上下,当有人按下这个键后,电梯会过来停在此层,这个人可以进去,并选择自己想去的层。电梯的调度策略也很简单,在一次向上的过程...
  • zzulp
  • zzulp
  • 2010-06-20 12:41
  • 3755

【操作系统】C语言模拟操作系统实现磁盘调度算法——电梯调度算法

#include #include #include int *Init(int arr[]) { int i = 0; srand((unsigned int)time(0)); for (i = 0; i < 15; i++) { arr[i] = rand() % 200...
  • pointer_y
  • pointer_y
  • 2016-09-01 17:45
  • 3618
    个人资料
    • 访问:46861次
    • 积分:1517
    • 等级:
    • 排名:千里之外
    • 原创:109篇
    • 转载:13篇
    • 译文:0篇
    • 评论:1条
    文章分类