小飞的电梯调度算法

文章探讨了《编程之美》中关于小飞的电梯调度算法,分析了不同时间复杂度的解决方案:stop1(O(N^2))、stop2(O(N))和stop3。stop3算法通过比较向上和向下爬楼梯的人数来决定电梯停靠楼层,以最小化爬楼梯总能量。此外,还讨论了能量消耗扩展问题,即上下楼梯能量消耗不同时,如何确定最佳停靠楼层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《编程之美》第1.8节:小飞的电梯调度算法

假设楼层共有N层,电梯停在第x层,要去第i层的乘客数目总数为total[i],所爬楼梯的总数就是sum{total[i]*|i-x|},求使得这个和最小的x的值,即电梯停的楼层数。

stop1函数是O(N^2)的算法,就是假设在每层楼停下,计算此时需要爬的楼梯数,如果比最小的少,则赋值。

stop2函数时O(N)时间的算法,这里如果电梯当前层数为i,在i之前的人总的需要爬楼梯数为totalBefore,在i之后需要爬的总楼梯数时totalNum,则在i+1层时,前面需要爬的楼梯数增加了totalBefore+total[i],后面的人爬楼梯总数减少了totalNum,当然减少之后,totalNum此时应更新为totalNum-=total[i]。这样,当遍历完整个楼层以后就能够得到最优解。

stop3函数比较有意思,也是《编程之美》给出的解法:在第i层停下时,假设有N1个人在第i层以下,有N2个人在第i层,有N3个人在i层以上,假如在第i+1层停,此时增加的向上爬楼梯数为N1+N2,减少的向下爬楼梯数为N3,假如此时N1+N2<N3,那么说明在第i+1层停下,比在第i层停下更能减少大家爬楼梯的总数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值