• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:用代码解出电梯停靠的最佳位置

python 搞代码 3年前 (2022-02-20) 18次浏览 已收录 0个评论

大家好,我是查理
最近回家坐电梯,忽然又想起电梯的最佳停泊地位。
最早发现这个问题的时候是两年前在杭州。过后住在一个蛮高端的叫翡翠城的小区,楼里有两部电梯。
察看一段时间你会发现,两部电梯在很长时间没人乘坐后,它不会全副停在1层,而是一部在一层,另一部在楼的两头地位。比方那栋楼有16层高,常常在早上起来发现,电梯一部在1层,另一部在8层。
过后就在想,这么做的目标是什么?是为了让绝对住在高层的业主能更快的坐到电梯?如果是这样,那这种一部停在两头,一部停在1层是不是最迷信的形式?

先从只有一部电梯的状况开始剖析。
咱们假如楼有n层,到每一层去的人的概率是一样的, 同时从第x层下到1层的概率也是一样的。假如电梯的停泊地位是p,那么能够推出当p等于1的时候,总的代价最低(全副人上楼,下楼电梯运行的总楼层数)。

当有两部电梯的时候,状况要简单很多,很难通过不等式来推理。
应用程序模仿,代码如下:

import sys
from math import *
#top floor
N = 10
#elevator number
M = 3
def distance(src, dest, elevator):
        return min(map(lambda x : abs(x-src), elevator)) + abs(src-dest)

#sum ditance
def up_down(elevator):
        sum = 0
        for i in range(1, N+1):
                sum += distance(1, i, elevator)
                sum += distance(i, 1, elevator)
        return sum
#elevator pos
def yield_elevator(m) :
        if (m == 1):
                for i in range(1, N+1):
                        yield [i]
        else:
                for ele in yield_elevator(m-1):
                        for i in range(ele[-1], N+1):
                                yield ele + [i]
min_dis = sys.maxint
for ele in yield_elevator(M):
        dis = up_down(ele)
        if (dis < min_dis):
                min_dis = dis
                res = [ele, dis]
print res

后果很有意思,并不是过后小区的设计方案。
而是应该:一部在1层,另一部在2/3楼层处地位。假如楼有24层,那么一部电梯应该停在1层,另一部停在16层。

当一栋楼有三部电梯时:第一部应该停在1层,第二部停在2/5地位处,第三部停在4/5地位处。假如楼有100层,那么第一部在1层,第二部在40层,第三部在80层。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:用代码解出电梯停靠的最佳位置
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址