2012-10-03 44 views
-1

您將得到一組n工作。每項工作都與起始時間和結束時間相關聯,均以整數表示,並且您可以從中獲利。您必須確定採取哪些工作來實現利潤最大化,同時請記住,任何時候只能完成一項工作。有沒有一種算法,這比O(ñ)效率?事件安排

+0

你是指'O(n^2)'? – elyashiv

+0

是的我有一個解決方案,它是O(n^2)。使用地圖根據開始和結束時間進行排序,然後迭代和更新,bt時間限制超過。我需要更好的東西 – nightrider

+1

歡迎來到Stack Overflow!你的問題對於這個網站有點太廣泛了。我們專注於這裏的具體問題,而不是爲一般任務提供完整的解決方案。你能告訴我們你現有的解決方案嗎?它會給我們提供建議的起點。 – Pops

回答

0

該算法:

鑑於集合S = {I1,I2,...,IN}:

  • 排序根據從低到高的開始時間S中的間隔。

現在我們已經命令集{J1,J2,...,Jn}。 (以W1,W2,...,Wn作爲利潤)

我們將(i)定義爲最小指數k,這樣的起始時間Jk高於Ji的結束時間。如果沒有人存在,則返回-1。

將D [i]表示爲集合{Ji,Ji + 1,...,Jn}中的最大利潤(如您所述)。

所以我們得到:

D[-1] = 0; 
D[i] = maximum{D[i+1],Wi + D[a(i)]}. 
  • 返回d [0]。

運行時間:

排序N個區間 - O(nlogn)。

構造D-O(n)。

整體運行時間= O(nlogn)。

+0

感謝d建議:) – nightrider

0

您描述的問題稱爲加權間隔調度,可以在O(nlogn)步驟中解決 - 如果作業已經排序,甚至可以解決O(n)。

快速谷歌搜索將爲您提供所有您需要的信息。