算法设计(eclipse编写贪心算法设计活动安排)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

陕西师大计科院2009级《算法设计与分析》课程论文集

算法设计(贪心算法解决活动安排)

设计者:朱亚君

贪心算法的计算过程如下图所示。图中每行相应于算法的一次迭代。阴影长条表示的活动是已选入集合A的活动,而空白长条表示的活动是当前正在检查相容性的活动。

图1贪心算法的计算过程图

若被检查的活动i的开始时间Si小于最近选择的活动j的结束时间fi,则不选择活动i,否则选择活动i加入集合A中。

贪心算法并不总能求得问题的整体最优解。但对于活动安排问题,贪心算法却总能求得的整体最优解,即它最终所确定的相容活动集合A的规模最大。这个结论可以用数学归纳法证明。

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

附录:

贪心算法的实现具体程序如下:

// 贪心算法实现代码 n为活动个数 s为活动开始起始时间队列 f 为活动结束队列 A为已选入集合

import java.util.Scanner;

public class a {

/**

* @param args

*/

static void GreedySelector(int s[],int f[],boolean A[])

{

//第一个活动为结束时间最早进入选入队列

int n=s.length;

A[1]=true;

int j=2;

for(int i=2;i

{

if(s[i]>=f[j])

{

A[i]=true;

j=i;

}

else

A[i]=false;

}

}

static void paixu(int s[],int f[])//进行以结束时间的大小排序

{

int n=s.length;

int m;

for(int i=0;i

for(int j=i;j

{

if(f[j]>f[j+1])

{

m=f[j];

f[j]=f[j+1];

f[j+1]=m;//终止时间如果前一个大于后一个就交换位置

陕西师大计科院2009级《算法设计与分析》课程论文集

m=s[j];

s[j]=s[j+1];

s[j+1]=m;//起始时间也同时进行交换位置

}

}

}

static void Output(boolean a[],int s[],int f[])

{

int t=0;

System.out.println("可以安排的活动有以下几个!");

for(int i=0;i

{

if(a[i])

{

System.out.print("(");

System.out.print(s[i]+",");

System.out.print(f[i]);

System.out.print("),");

t++;

}

}

System.out.println(";最多可以安排的活动是"+t+"个。");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in=new Scanner(System.in);

System.out.print("请输入有几场活动!");

int n=in.nextInt();

int s[]=new int[n+1];

System.out.println("请输入每场活动的开始时间(用空格隔开,以回车结束)");

for(int i=1;i<=n;i++)

s[i]=in.nextInt();

int f[]=new int[n+1];

System.out.print("请输入每场活动的结束时间(用空格隔开,一回车结束)");

for(int j=1;j<=n;j++)

f[j]=in.nextInt();

boolean a[]=new boolean[12];

paixu(s,f);

GreedySelector(s,f,a);

Output(a,s,f);

}

}

相关文档
最新文档