编程之美:第一章 1.8电梯调度算法

本文深入探讨了《编程之美》第一章中的1.8电梯调度算法问题,通过状态分析和设计策略,揭示了如何有效地优化电梯运行效率,提高楼宇交通流动性。
摘要由CSDN通过智能技术生成
/*
电梯调度算法:
微软有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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值