/*
电梯调度算法:
微软有6部电梯,每层都有人上下,电梯在每层都停。
每次电梯从一层往上走时,只允许电梯停在其中的某一层。所有的乘客都从一楼上电梯,到达某层后,电梯停下来,
所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则自动计算出应停在
的楼层。
电梯停在那一层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
分析:本质是优化问题。如何寻找抽象模型。树?图?
影响结果的两个因素:乘客数目及需要停的目的楼层。我们可以从统计到达各层的乘客数目分析;
假设楼层一共有N层,电梯停在第x层,要去第i层的乘客数目总数为Tot[i],这样所爬楼梯的总数就是
从1到N 对Tot[i]*|i-x|求和
我们只需要找到x即可
解法1:
可以从第一层开始枚举x一直到N层,计算出总共要爬的层数,然后选取最小值。每层楼计算时,要把所有N层楼计算
一遍,时间复杂度为O(n),总共计算N层楼,因此总时间复杂度为O(n^2)
解法2:
假设电梯停在第i层楼,可以计算出所有乘客总共要爬楼梯的层数Y,如果有N1个乘客的目的楼层在i层楼一下,有N2
个乘客在第i层楼,还有N3个乘客再第i层楼以上。这个时候,如果电梯改停在第i-1层,所有目的地在第i-1层及
以下的乘客可以少爬一层,总共可以少爬N1层,而目的地在第i层及以上的乘客需要多爬一层,总共多爬N2+N3层
乘客总共需要爬的层数为Y-N1+(N2 + N3) = Y - (N1 - N2 - N3)
反之,如果电梯在i+1层停,乘客需要爬的层数为Y+N1+N2-N3
停i-1:Y - N1 + N2
编程之美:第一章 1.8电梯调度算法
最新推荐文章于 2022-10-30 12:46:24 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)