貪心演算法-活動安排問題
阿新 • • 發佈:2018-11-19
對於活動安排問題,該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了一個簡單漂亮的方法,使盡可能多的安排活動能相容的使用公共資源。
貪心演算法不能總是得到整體問題的最優解,但對於活動安排問題,貪心演算法卻總能得到整體的最優解。
可以將所有活動的開始時間、終止時間以及活動的標記(活動是否可以舉辦)分別放在三個陣列中,然後對三個陣列進行操作。
將第一個活動設為可舉辦,然後後面的每一個活動的開始時間都要大於前一個活動的結束時間,設標記為可舉辦,否則設為不可舉辦。
public class ActivityArrangement { public static void main(String args []) { int count=0; int s [] = {1,3,0,5,3,5,6 ,8 ,8 ,2 ,12}; //活動的起始時間 int f [] = {4,5,6,7,8,9,10,11,12,13,14}; //活動的終止時間 boolean a [] = new boolean [11]; //活動是否可以舉辦 count = greedselector(s,f,a); for (int i = 0;i <= 10;i ++) if (a [i] == true){ count++; System.out.println("第" + (i+1) + "項活動可以舉辦"); } System.out.println(">>>"+"可舉辦" + count + "項活動"); } /** * * @param s * @param f * @param a * @return */ public static int greedselector(int [] s,int [] f,boolean [] a) { a[0]=true; //第一項活動可舉辦 int j = 1; for (int i = 1;i < s.length;i ++) { if (s[i] >= f[j]) //尋找下一個可舉辦的活動 { a [i] = true; //設定這個活動可舉辦 j = i; } else a [i] = false; //設定這個活動不可舉辦 } return 0; } }