貪心算法-----單線程:活動安排問題 多線程:多機調度問題


一、貪心算法的特點

顧名思義,貪心算法總是做出在當前看來是最好的選擇。雖然貪心算法並不從整體最優上加以考慮,它所做出的選擇只是在某種意義上的局部最優選擇。

貪心算法的優點是更簡單,更直接且解題效率更高,即使貪心算法不能得到整體最優解,但其最終結果卻是最優解的很好的近似解。

 

二、貪心算法的理解

由於涉及到在做出在當前看來最好的選擇,所以會經常采用排序算法,推薦使用快速排序算法,復雜度是O(nlgn),且在同等復雜度算法中效率是最高的,

本文涉及的排序都采用冒泡排序,只是注明需要排序而已。

貪心算法可以從“單線程”還是“多線程”這個角度划分問題。例如:

(1)單線程問題

“活動安排問題”:由於規定使用同一資源,且活動不會同時進行,即同一時間內只有一個活動能使用這一資源,需要對活動開始和結束時間進行排序,即單線程問題;

“背包問題”:注意不是經常所見的0-1背包問題,它的特點是可以選擇物品i的一部分,而不是0(不選擇)和1(選擇)。這種情況下根據每種物品單位重量的價值

作為排序的對象。同理,只有一個背包,所以屬於單線程問題;

“最優裝載問題”:是將一批集裝箱裝上有重量限制的輪船,無體積限制,此時需要對重量從小到大排列,同理只有一艘輪船,所以屬於單線程問題。

(2)多線程問題

多線程問題主要是多個服務器處理多個任務,尋求處理所有任務的情況下,用掉最少時間的問題。因為任務並不局限於在某一個服務器上處理,還是要綜合考慮

這些服務器,所以屬於多線程問題。

三、算法應用實例

(1)單線程問題------活動安排問題

 問題描述:

設有n個活動的集合E={1,2,...n},其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有一個活動能使用這一資源。每個活動i都有一個要求

使用該資源的起始時間si和fi,且si<fi。如果選擇了活動i,則它在半開時間區間[si,fi)內占用資源。若區間[si,fi)和[sj,fj)不相交,則稱活動i和活動j是相容的。

活動安排問題就是要在所給的活動集合中選出最大的相容活動子集和。

 

解決思路:

利用貪心算法,將各活動按結束時間的非減序進行排列,由於輸入的活動以完成的時間非減序排列,所以都每次都選擇具有最早完成時間的活動
進行考慮,因為這樣可以為未安排的活動留下盡可能多得時間,使剩余的可安排時間段極大化,以安排更多的相容活動。

 

程序設計:

例子描述:

 

算法具體實現:

程序結果:

跟圖示的效果是一致的。

 

(2)多線程問題 之多機調度問題類型一:機器是完全相同的,不同的作業處理時間是獨立的

問題描述:

設有n個獨立的作業{1,2,...n},由m台相同的機器進行加工處理。作業i所需的處理時間為ti。現規定,任何作業可以在任何一台
機器上加工處理,但未完工之前不允許中斷處理。任何作業不能拆分成更小的子作業。

 

解決思路:

需要實現將n個獨立的作業按照時間從大到小排序;在這里需要考慮的是:
如果n<=m,則需要的時間就是n個作業當中最長處理時間t。
如果n>m,先給每個機器分配作業,這一趟下來就分配了m個作業。然后對每個作業而言,選取處理時間最短的機器區域處理。
以上就是貪婪算法的思路。

 

例子描述:

  具體實現過程:

程序設計:

程序結果:

與圖示的結果是一致的。

 

(3)多線程問題 之多機調度問題類型二:任務是完全相同的,每個服務器的執行時間是獨立的

問題描述:

假設有一個中央調度機,有n個相同的任務需要調度到m台服務器上去執行,由於每台服務器的配置不一樣,因此服務器執行一個任務所花費的時間也不同。
現在假設第i個服務器執行 一個任務需要的時間為t[i].


例如:有2個執行機a,b,執行一個任務分別需要7min,10min,有6個任務待調度。如果平分這6個任務,即a,b各3個任務,則最短需要30min執行完所有。
如果a分4個任務 ,b分2個任務,則最短28min執行完。

 

解決思路:

用一個數組記錄每台機器已執行的時間(初始為0),在調度每一個任務的時候,對每一台機器需要執行的時間進行對比(已執行的時間加上需要執行該任務的時間),
選取執行時間最短的機器進行處理.

 

程序設計:

 

程序結果:

與例子的描述結果是一致的。

 

四、貪心算法總結

從單線程和多線程角度分析問題,並且着重描述了多機調度的兩種不同問題所采用的方法,需要慢慢去消化理解,但是總體的思路還是很清晰,這便是貪心算法的

一大優點。從上述的問題中,幾乎所有的問題都要排序,就算沒有直接排序,也還是會進行比較,以便做出當前最好的選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM