離散事件模擬 銀行排隊時間模擬

2021-07-02 03:53:41 字數 1229 閱讀 3194

在資料結構中有個講述如何模擬銀行排隊,最終算出每個人平均的逗留時間。

這是需要資料結構的知識。將銀行的每個視窗看成是乙個佇列,那麼對於每次來乙個人,都需要從最短的佇列進行排隊。(其實更優秀的做法是從最短的等待時間佇列來排隊)。

這裡的做法是這樣的,首選在乙個佇列中插入乙個人,整個事件是事件驅動的,每次去檢查所有佇列,刪除那些業務用時已經超出的人,然後選擇最短的佇列來插入乙個人,也就是說,每次插入乙個人之前就需要清除佇列中的人。然後再選擇合適的佇列來插入新的人。

其實更合理更簡單的邏輯是:先說乙個佇列,可以假設乙個迴圈花費1s時間,對於每乙個迴圈,都採用一定的方法(比如隨機數)來判斷是否有新人來辦理業務,有新人則再隨機確定耗費時長,然後再將對頭的耗時減去1,判斷當前佇列中是否有已經可以出隊的人,如果有,就出隊,如果沒有,繼續迴圈。

至於多個佇列,需要注意的就是每次插入都需要插入人少的佇列,然後迴圈處理所有佇列,看是否可以出隊

#include #include #include #include #include #include #include using namespace std;

/*模擬乙個離散時間情形

比如銀行的排隊系統,記錄每乙個客戶的平均逗留時間

*//*

思路:假設銀行有多個視窗,那麼每個視窗就是每個佇列,我們

記錄在規定時刻 或者所有視窗再次為空的情況下結束事件的模擬

*/#define closetime 10000 //最長的模擬事件是10000分鐘以後關閉事件的模擬

typedef struct record record;

struct record

;void init(vector>& win)

void bank_simulation(int winnum)

{ double customernum=1,totaltime=0;

int curtime=0;

int flag =1;

int lendeque,index,i;

record temp;

vector> win(winnum);

srand((unsigned)time(null));

init(win);

while(flag)

{ flag = 0;

lendeque = numeric_limits::max();

for(i=0;i10000)

break;

cout<<"===="<

離散事件模擬 銀行排隊

某銀行有四個視窗接待客戶,每個視窗在某個時刻只能接待乙個客戶,人數多時則需要進行排隊,剛進來的客戶,視窗無人則進行業務辦理,有人則排隊,排在人數最少的隊伍後面。問題 計算在銀行關閉之前,計算客戶在銀行逗留的平均時間 用c寫的,給書上 的實現了下,如下 include include include ...

離散事件模擬 銀行排隊

假設不存在插隊的情況,並且人人都會選擇排到人數最少的那乙個視窗排隊。假設人們陸續到達銀行,不會同時到達銀行。如下 include include include define max size 10000 佇列的初始化長度 define end time 10000 銀行關門時間 using nam...

離散事件模擬 銀行管理

離散事件模擬 銀行管理 timelimit 1000ms memory limit 65536k 題目描述 現在銀行已經很普遍,每個人總會去銀行辦理業務,乙個好的銀行是要考慮平均逗留時間的,即 在一定時間段內所有辦理業務的人員逗留的時間的和 總的人數。逗留時間定義為人員離開的時間減去人員來的時間。銀...