電梯排程演算法 C

2021-10-06 21:04:15 字數 2802 閱讀 3063

1.演算法解析

掃瞄演算法(scan)又稱電梯排程演算法,scan演算法是磁頭前進方向上的最短查詢時間優先演算法,它排除了磁頭在盤面區域性位置上的往復移動,scan演算法在很大程度上消除了sstf演算法的不公平性,但仍有利於對中間磁軌的請求。電梯排程演算法是從移動臂當前位置開始沿著臂的移動方向去選擇離當前移動臂最近的那個柱訪問者,如果沿臂的移動方向無請求訪問時,就改變臂的移動方向再選擇。

這個演算法好比乘電梯,如果電梯已向上運動到4層時,依次有3位乘客陳生、伍生、張生在等候乘電梯。他們的要求是:陳生在2層等待去10層;伍生在5層等待去底層;張生在8層等待15層。由於電梯目前運動方向是向上,所以電梯的形成是先把乘客張生從8層帶到15層,然後電梯換成下行方向,把乘客伍生從5層帶到底層,電梯最後再調換方向,把乘客陳生從2層送到10層。

由於磁碟移動臂的初始方向有兩個,而該演算法是與移動臂方向有關,所以分成兩種情況來討論。

現有需要讀取的資料的柱面次序為:35 12 73 230 80 20 310 120,初始柱面為65號。

(1)移動臂向外移動:當65操作結束後,應該先處理35號柱面的請求,然後到達20號柱面執行操作,隨後處理12號柱面請求,後繼操作的次序應該是73、80、120、230、310。

(2)移動臂向內移動:當65操作結束後,應該先處理73號柱面的請求,然後到達80號柱面執行操作,隨後處理120號柱面請求,後繼操作的次序應該是230、310、35、20、12。

2.**

①電梯排程演算法函式scan()

int

scan

(int

*cyclist,

int*cycorder,

int n,

int start,

int dir)

; sum =0;

for(

int j=

0; j

else

if(dir ==

0&& cyclist[i]

< start && tag[i]==0

)}}if

(dir &&

max(cyclist, n, cyclist[index]))

//判斷此時進行操作的柱面是否為此方向最大

dir =0;

elseif(

min(cyclist, n, cyclist[index]))

//判斷此時進行操作的柱面是否為此方向最小

dir =1;

sum +

= min;

tag[index]=1

;//將標記陣列置為1,表示已經將其柱面進行操作

cycorder[j]

= cyclist[index]

; start = cyclist[index];}

return sum;

}

②操作柱面大小判斷函式max()、min()

//引數:cyclist 待操作的柱面陣列,n 柱面的個數,num 此時操作柱面號

//返回值:返回0或1用於判斷

intmax

(int

*cyclist,

int n,

int num)

intmin

(int

*cyclist,

int n,

int num)

③全部**

#include

#include

using

namespace std;

intmax

(int

*cyclist,

int n,

int num)

intmin

(int

*cyclist,

int n,

int num)

//0外越小,1內越大

intscan

(int

*cyclist,

int*cycorder,

int n,

int start,

int dir)

; sum =0;

for(

int j=

0; j

else

if(dir ==

0&& cyclist[i]

< start && tag[i]==0

)}}if

(dir &&

max(cyclist, n, cyclist[index]))

dir =0;

elseif(

min(cyclist, n, cyclist[index]))

dir =1;

sum +

= min;

tag[index]=1

; cycorder[j]

= cyclist[index]

; start = cyclist[index];}

return sum;

}int

main()

return0;

}/*165 8

35 12 73 230 80 20 310 120

*/

3.執行結果(1)移動臂向內:

(2)移動臂向外:

電梯排程演算法

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

電梯排程演算法( )

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

簡化電梯排程演算法

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