[英]Scheduling algorithm with waiting time and priority
我遍歷了調度算法及其實現的列表,但是找不到實現解決以下問題的算法的任何參考。
給定一系列具有n個過程的過程,第i個過程由以下形式表示:
Arrival [i]代表其到達時間,
Depart [i]表示進程將終止的時間(已處理或未處理無關緊要),並且
Time [i]代表服務過程所需的時間,以及
Preferred [i]表示布爾值(如果首選該過程,則為true,否則為false)
我們需要安排流程以最大程度地處理首選流程。
一次只能處理一個流程,如果某個流程在完成之前離開,則表示未處理。 否則,一旦啟動,就無法暫停或中斷進程。
“最佳”解決方案的標准如下:
任何想法,將不勝感激。
我懷疑您最好的解決方案將是簡單的回溯算法-嘗試所有可能性,並以“未得分”的分數評估每個可能性:最大程度地減少您未完成的首選流程的數量。
首先,進行一些預處理:
現在,只需執行經典的嘗試一切遞歸:
Base Case:
If process list is empty, move to handling non-preferred processes in a similar function.
Case 1: Serve the first process `P` on the list.
skipped [remains unchanged]
new_served_list = served_list + P (append)
new_start = current start time + `Time(P)`
new_total = total processing time + `Time(P)`
// remove processes whose latest start time will be passed:
new_proc_list = proc_list - {any process with `latest_start(P) < start_time`}.
Recur on (new_start, new_total, new_served_list, new_proc_list)
save `result_1`
Case 2: *Don't* serve the first process.
new_skipped = skipped + 1
new_proc_list = proc_list - `P`.
recur on (start, total, served_list, new_proc_list)
save `result_2
Compare result_1 and result_2; return the better one.
對於非首選流程,您仍然需要一個類似的功能-但必須將流程放入首選流程的空隙中。 我將把擴展名留給學生作為練習。 :-)
請注意,它可以分解為許多小問題,每個打開間隔一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.