電梯排程演算法

2021-09-06 08:06:52 字數 1702 閱讀 2794

在高峰時間,實習生小飛常常會被電梯每層樓都停弄得很不耐煩,於是他想出了這樣乙個辦法:由於樓層並不高,那麼在繁忙的時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層樓後,電梯聽下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓時,每個乘客選擇自己的目的層,電梯則自動計算出應停的樓層。

問:電梯停在哪一層樓,能夠保證這次乘坐電梯的所有乘客爬樓梯的層數之和最少?

#

! /usr/bin/python

#coding=utf-8

import

random,math

from itertools import

groupby

floor = 5

defmain():

arr = [random.randint(1,floor) for i in range(random.randint(3,5))]

print

arr do1(arr)

do2(arr)

defdo1(arr):

print"-

" * 20data = [(i,sum([abs(item - i) for item in arr])) for i in range(1,floor+1)]

maxdata = min([item for index, item in

data])

for index, item in

data:

print

"%s,%s %s

" % (index,item,"*"

if item == maxdata else"")

defdo2(arr):

print"-

" * 20arr =sorted(arr)

nperson = [0] * (floor + 1)

for k,v in

groupby(arr):

nperson[k] =len(list(v))

#print nperson

floors = sum([x - 1 for x in arr if x > 1])

n1,n2,n3 = 0, nperson[1], sum(nperson) - nperson[1]

ntargetfloor = format_print(1,n1,n2,n3,floors,none)

for x in range(2,floor+1):

floors += n1 + n2 -n3

n1 +=n2

n2 =nperson[x]

n3 -=n2

ntargetfloor =format_print(x,n1,n2,n3,floors,ntargetfloor)

defformat_print(x,n1,n2,n3,floors, ntargetfloor):

print

x,n1,n2,n3,floors,

if n1+n2 >= n3 and (ntargetfloor == none or ntargetfloor ==floors):

print"*

"return

floors

print

return

ntargetfloor

if__name__ == '

__main__':

main()

電梯排程演算法( )

今天我們做的是乙個結對程式設計作業,其實對結對程式設計,我也有兩種看法,第一 提高自己,第二 埋沒自己。關鍵看是如何去利用結對程式設計,才能達到事半功倍的效果。這次我們做的是乙個關於電梯控制排程的程式,這個程式的演算法思想做了一天,初步有了電梯排程演算法的框架。由於電腦換了,拿到聯想服務站維修,只在...

電梯排程演算法 C

1.演算法解析 掃瞄演算法 scan 又稱電梯排程演算法,scan演算法是磁頭前進方向上的最短查詢時間優先演算法,它排除了磁頭在盤面區域性位置上的往復移動,scan演算法在很大程度上消除了sstf演算法的不公平性,但仍有利於對中間磁軌的請求。電梯排程演算法是從移動臂當前位置開始沿著臂的移動方向去選擇...

簡化電梯排程演算法

github 編寫程式的 行數 除錯的bug數 完成該次作業總耗時 245 265行 10 20個 12 15h elevator scheduling a策略 選取當前 向上 向下 停靠 三類行動中讓另外兩類行動的乘客等待時間最小的乙個 a.cpp b策略 估計三種行動的耗時,採用預估耗時最少的 ...