多處理機調度問題(NP)

問題描述

有 n 個獨立的任務,分配給 m 個相同的處理機進行處理,每個任務所花費的時間爲 t[i], i = 1..n,每個任務獨立,不可分割,不可中斷。問題:這些處理機要處理完這些任務,所需要花費的最短時間是多少?

問題解決

該問題也是NP問題,也跟上篇博客中的裝箱問題類似:http://blog.csdn.net/nisxiya/article/details/45533811
裝箱問題,是給定容量的箱子,問最少需要幾個箱子可以滿足條件。
而多處理機調度問題,則是給定固定數量的處理機,問每個處理機都儘快處理,其中最長需要處理多長時間。類似於給定固定的箱子,但是箱子容量可以變化,問這些相同箱子的最大容量設計爲多少時,可以滿足條件,且最大容量要儘量小。

最閒適應算法

這類多處理機問題,也是還沒有找到比較好的多項式解決方法,目前使用貪心算法,給出比較近似最優解的答案。
1)對任務按照花費時間從長到短進行排序,時間複雜度爲 O(n log n)
2)將任務一一分配給 m 個機器中最閒的那個。所謂最閒,是指當前他所要處理的任務總時間和最小。如何快速找到這 m 個機器中任務量最小的那個機器呢? 使用 平衡二叉樹、最小堆等都可以完好地解決,時間複雜度爲 O(log m)。因此第二步中,總的時間複雜度爲 O(n log m)

由於m <= n,(否則就不用這麼費力求解了,直接每個處理機任意分配一個任務即可),T(n) = O(n log n) + O(n log m) , 即 T(n) = O(n log n)了。

例題

有7個獨立任務,有3臺機器完成處理,各個任務的花費時間爲{2,14,4,16,6,5,3}, 具體的求解方案如下:
這裏寫圖片描述

發佈了118 篇原創文章 · 獲贊 17 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章