Java运用贪心算法求解活动安排问题(实验报告)

Java运用贪心算法求解活动安排问题

实验目的:
1) 掌握贪心算法的设计思想;
2)掌握贪心算法解题步骤;
3)学习运用贪心算法分析并解决活动安排问题。
实验要求:例:设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下:
i 1 2 3 4 5 6 7 8 9 10 11
S[i] 1 3 0 5 3 5 6 8 8 2 12
f[i] 4 5 6 7 8 9 10 11 12 13 14

实验内容:
有 n 个活动需要使用同一资源,且同一时段内只有一个活动能使用该资源。每个活动 i 都有起始时间 si 和结束时间 fi (si < fi),如果安排活动 i,则它在时间区间 [si,fi) 内占用资源。若区间 [si, fi) 与区间 [sj,fj) 不相交,则称活动 i 与活动 j 相容。
设S为活动的集合,si和fi分别为活动i的开始和截止时间。
定义:活动i和j相容。
求S最大的两两相容的活动子集A。
把活动按照截止时间从小到大排序,使得f1<=f2<=…<=fn,然后从前往后挑选,只要和前面选的活动内容相容,就把这项活动选入A

i 1 2 3 4 5 6 7 8 9 10 11
S[i] 1 3 0 5 3 5 6 8 8 2 12
f[i] 4 5 6 7 8 9 10 11 12 13 14

实验步骤:

package sf;

public class Activity {
public static int greedySelect(int[] s,int[] f,boolean[] a) {
	int n=s.length-1;
	a[1]=true;
	int j=1;
	int count=1;
	for(int i=2;i<=n;i++) {
		if(s[i]>=f[j]) {
			a[i]=true;
			j=i;
			count++;
		}
		else a[i]=false;
	}
	for (int i=1; i<a.length; i++)
        System.out.println("A" + i + " = " + a[i]);
    System.out.println("总的活动数量 = " + count);
	return count;
}
public static void main(String[] args) {
	int[] s = {1,3,0,5,3,5,6, 8, 8, 2, 12};// s[0]不用
    int[] f = {4,5,6,7,8,9,10,11,12,13,14};
    boolean[] a = new boolean[12];
    System.out.println("各活动起始时间为:1,3,0,5,3,5,6, 8, 8, 2, 12");
	System.out.println("各活动结束时间为:4,5,6,7,8,9,10,11,12,13,14");
    greedySelect(s, f, a);
    
}
}

实验结果:
Java运用贪心算法求解活动安排问题(实验报告)_第1张图片
实验小结

你可能感兴趣的:(Java,java,贪心算法,开发语言)