我正在解決Papadimitrou和Vazirani的算法書中的練習題。處理具有相同優先級的作業的算法
以下是問題:
服務器有n個客戶等待服務。預先知道每個客戶所需的服務時間:對於客戶i而言是ti分鐘。因此,例如,如果客戶按照增加i的順序服務,則第i個客戶必須等待Sum(j = 1到n)tj分鐘。
我們希望儘量減少總的等待時間。爲此提供一個有效的算法。
我嘗試:
我想到了幾個辦法,但不可能決定哪個是最好的,或者拍我的其他方式。
方法1:
爲他們服務輪循方式與時間片爲5。然而,當我需要決定時間片的時候要多加小心。它不應該太高或太低。所以,我想選擇時間片作爲服務時間的平均值。
方法2: 假設作業是根據他們採取並且被存儲在一個陣列A中的時間排序[1 ... n]的
首先服務A [1]然後,將[N]然後A [ 2]然後A [n-1]等等。
我真的不能確定哪一個會是這個問題的最佳解決方案。我錯過了什麼。
感謝, 錢德爾
想象一下,你只有兩個工作,一個短和另一個長...計算等待時間先執行一個或另一個...只是爲了kickstart你的「算法」 – 2010-10-22 01:31:23
然後添加切片功能,看看你是否得到了一些東西...... – 2010-10-22 01:34:54
假設客戶的「等待時間」是他們的工作完成之前的時間,那麼時間片總是更糟糕(除非你有多個CPU /內核並可以在它們之間遷移任務)。如果工作A是最後完成的工作,那麼儘早完成工作會延遲完成其他工作,而完全沒有完成工作A。所以最好不要在完成所有其他工作之前開始上一份工作。通過歸納,你不應該在中途轉換工作。 – 2010-10-22 01:36:17