貪心算法之活動選擇問題

import java.util.ArrayList;
import java.util.List;

public class ActiveSelector {
	private int[] s= {0,1,3,0,5,3,5,6,8,8,2,12};		//a0 a1..a11活動開始時間數組
	private int[] f = {0,4,5,6,7,9,9,10,11,12,14,16};	//a0 a1..a11活動結束時間數組
	
	List<Activity> ls = new ArrayList<Activity>();		//用來存放最優選擇的容器
	
	public static void main(String[] args) {
		new ActiveSelector().start();
	}
	
	void start() {
		recursiveActivitySelector(s,f,0,11);
		print();
	}
	
	private void print() {
		System.out.println("最優選擇方案:");
		for(Activity i:ls) {
			System.out.print("a"+i.index+":");		//打印最優的選擇方案
			System.out.println(i.startTime+"-"+i.endTime);
		}
	}
	
	private void recursiveActivitySelector(int[] s,int[] f,int k,int n) {
		int m = k + 1;
		while(m<=n && s[m]<f[k]) {
			m = m + 1;
		}
		if(m <= n) {
			ls.add(new Activity(s[m],f[m],m));		//將最優的選擇加入到容器中
			recursiveActivitySelector(s,f,m,n);
		}
	}
		
	private class Activity {

		private int startTime = 0;		//活動的開始時間
		private int endTime = 0;		//活動的結束時間
		private int index = 0;			
		
		//構造函數
		public Activity(int starttime, int endtime,int index) {
			this.startTime = starttime;
			this.endTime = endtime;
			this.index = index;
		}
	}
}


運行結果和算法導論上一致:

最優選擇方案:
a1:1-4
a4:5-7
a8:8-11
a11:12-16


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章