活動安排問題(貪心演算法)

來源:互聯網
上載者:User

//活動安排問題</p><p>public class Activearr<br />{<br />public static int greedselector(int [] s,int [] f,boolean [] a)<br />{<br />int n = s.length - 1;<br />a [0] = true;<br />int j = 1;<br />int count = 1;</p><p>for (int i = 1;i <= n;i ++)<br />{<br />if (s [i] >= f [j])<br /> {<br /> a [i] = true;<br /> j = i;<br /> count ++;</p><p> }<br /> else a [i] = false;</p><p> }</p><p> return count;</p><p>}<br />public static void main(String args [])<br />{<br />int count;<br />int s [] = {1,3,0,5,3,5,6,8,8,2,12};<br />int f [] = {4,5,6,7,8,9,10,11,12,13,14};<br />boolean a [] = new boolean [11];</p><p>Activearr aa = new Activearr();<br />count = aa.greedselector(s,f,a);<br />System.out.println("共有" + count + "活動可以舉行:");<br />System.out.println();<br />for (int i = 0;i <= 10;i ++)<br /> if (a [i] == true)<br /> System.out.println("第" + i + "活動可以舉行");</p><p>}</p><p>} 活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公用資源的活動。貪心演算法提供了一個簡單、漂亮的方法使得儘可能多的活動能相容地使用公用資源。

    設有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中。直觀上,按這種方法選擇相容活動為未安排活動留下儘可能多的時間。也就是說,該演算法的貪心選擇的意義是使剩餘的可安排時間段極大化,以便安排儘可能多的相容活動。

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

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

 

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

 

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.