《编程之美》第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层停下更能减少大家爬楼梯的总数。

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

被折叠的 条评论
为什么被折叠?



