1. 程式人生 > >貪心演算法-活動安排問題

貪心演算法-活動安排問題

	對於活動安排問題,該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了一個簡單漂亮的方法,使盡可能多的安排活動能相容的使用公共資源。
	貪心演算法不能總是得到整體問題的最優解,但對於活動安排問題,貪心演算法卻總能得到整體的最優解。
	可以將所有活動的開始時間、終止時間以及活動的標記(活動是否可以舉辦)分別放在三個陣列中,然後對三個陣列進行操作。
	將第一個活動設為可舉辦,然後後面的每一個活動的開始時間都要大於前一個活動的結束時間,設標記為可舉辦,否則設為不可舉辦。

 
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;
	}
}