簡體   English   中英

具有等待時間和優先級的調度算法

[英]Scheduling algorithm with waiting time and priority

我遍歷了調度算法及其實現的列表,但是找不到實現解決以下問題的算法的任何參考。

給定一系列具有n個過程的過程,第i個過程由以下形式表示:

Arrival [i]代表其到達時間,

Depart [i]表示進程將終止的時間(已處理或未處理無關緊要),並且

Time [i]代表服務過程所需的時間,以及

Preferred [i]表示布爾值(如果首選該過程,則為true,否則為false)

我們需要安排流程以最大程度地處理首選流程。

一次只能處理一個流程,如果某個流程在完成之前離開,則表示未處理。 否則,一旦啟動,就無法暫停或中斷進程。

“最佳”解決方案的標准如下:

  1. 最優選的過程。
  2. 提供了大多數非首選流程
  3. 最少的總處理時間。

任何想法,將不勝感激。

我懷疑您最好的解決方案將是簡單的回溯算法-嘗試所有可能性,並以“未得分”的分數評估每個可能性:最大程度地減少您完成的首選流程的數量。

首先,進行一些預處理:

  • 將列表划分為列表,而不是列表。
  • 按到達時間對每個列表進行排序。
  • 對於每個流程,請從出發時間中減去處理時間; 這會產生“最晚開始時間”,對我們來說更有用。

現在,只需執行經典的嘗試一切遞歸:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM