貪心演算法_活動安排問題_哈弗曼編碼

來源:互聯網
上載者:User

標籤:style   blog   http   使用   strong   檔案   資料   問題   log   

問題表述:設有n個活動的集合E = {1,2,…,n},其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有一個活動能使用這一資源。每個活i都有一個要求使用該資源的起始時間si和一個結束時間fi,且si < fi 。如果選擇了活動i,則它在半開時間區間[si, fi)內佔用資源。若區間[si, fi)與區間[sj, fj)不相交,則稱活動i與活動j是相容的。也就是說,當si >= fj或sj >= fi時,活動i與活動j相容。

由於輸入的活動以其完成時間的非減序排列,所以演算法greedySelector每次總是選擇具有最早完成時間的相容活動加入集合A中。直觀上,按這種方法選擇相容活動為未安排活動留下儘可能多的時間。也就是說,該演算法的貪心選擇的意義是使剩餘的可安排時間段極大化,以便安排儘可能多的相容活動。

演算法greedySelector的效率極高。當輸入的活動已按結束時間的非減序排列,演算法只需O(n)的時間安排n個活動,使最多的活動能相容地使用公用資源。如果所給出的活動未按非減序排列,可以用O(nlogn)的時間重排。

例:設待安排的11個活動的開始時間和結束時間按結束時間的非減序排列如下:

演算法greedySelector 的計算過程如所示。圖中每行相應於演算法的一次迭代。陰影長條表示的活動是已選入集合A的活動,而空白長條表示的活動是當前正在檢查相容性的活動。

若被檢查的活動i的開始時間Si小於最近選擇的活動j的結束時間fi,則不選擇活動i,否則選擇活動i加入集合A中。 

貪心演算法並不總能求得問題的整體最優解。但對於活動安排問題,貪心演算法greedySelector卻總能求得的整體最優解,即它最終所確定的相容活動集合A的規模最大。這個結論可以用數學歸納法證明。

活動安排問題實現:

...

 

 

 

 

 哈夫曼編碼

 

哈夫曼編碼是廣泛地用於資料檔案壓縮的十分有效編碼方法。其壓縮率通常在20%~90%之間。哈夫曼編碼演算法用字元在檔案中出現的頻率表來建立一個用0,1串表示各字元的最優表示方式。

 

給出現頻率高的字元較短的編碼,出現頻率較低的字元以較長的編碼,可以大大縮短總碼長。

 

 

a

b

c

d

e

f

頻率(千次)

45

13

12

16

9

5

定長碼

000

001

010

011

100

101

變長碼

0

101

100

111

1101

1100

 

定長碼:

 

  3*(45+13+12+16+9+5) = 300 千位

 

變長碼:

 

  1*45+3*13+3*12+3*16+4*9+4*5 = 224 千位

 

 

貪心演算法_活動安排問題_哈弗曼編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.