计算机科学与探索
主办单位:中国电子科技集团公司
国际刊号:1673-9418
国内刊号:11-5602/TP
学术数据库优秀期刊 《中文科技期刊数据库》来源期刊
       首 页   |   期刊介绍   |   新闻公告   |   征稿要求   |   期刊订阅   |   留言板   |   联系我们   
  本站业务
  在线期刊
      最新录用
      期刊简明目录
      本刊论文精选
      过刊浏览
      论文下载排行
      论文点击排行
      
 

访问统计

访问总数:24220 人次
 
    本刊论文
贪心算法解决活动安排问题研究

  摘要:利用贪心算法解决如何使用最少的资源安排一系列活动。并证明了贪心算法解决此问题的有效性,且进行了实例验证,并进行了复杂度分析,此算法是解决资源组合规划问题较好的方法。


  关键词:贪心算法;Java程序;复杂度分析;活动安排问题


  中图分类号:TP312文献标识码:A文章编号:1672?7800(2011)012?0043?02


  基金项目:广西研究生教育创新计划(2011106020812M58)


  作者简介:苏方方(1986-),女,河南商丘人,广西师范大学计算机科学与信息工程学院硕士研究生,研究方向为自然语言处理和算法;张金玲(1986-),女,山东菏泽人,广西师范大学计算机科学与信息工程学院硕士研究生,研究方向为远程教育和算法。


  0引言


  假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。这里就需要选用合适的算法来解决类似的问题。虽然计算机的计算能力每年都在飞快增加,但是,需要处理的信息量更是呈指数级的增长。互联网的信息流量在飞快进步,数据量更是达到了前所未有的程度。无论是三维图形,海量数据处理等都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决。


  1贪心算法以及贪心算法的基本要素


  贪心算法是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解。贪心算法可以简单描述为:对一组数据进行排序,找出最小值,进行处理,再找出最小值, 再处理。也就是说贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望得到结果是最好或最优的算法。


  贪心算法解题步骤:①从问题的某个初始解出发;②采用循环语句,就根据局部最优策略,得到一个部分解,缩小问题的范围或规模;③将所有部分解综合起来,得到问题的最终解。另外它也是一种某种度量意义下的最优解的分级处理方法。


  对于一个具体的问题,怎么知道是否可用贪心算法来解决问题,以及能否得到问题的一个最优解呢?从许多可以用贪心算法求解的问题中可以看到它们一般具有两个重要的性质:①贪心选择性质;②最优子结构性质。


  另外,同一个问题可用不用算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。一个算法的评价主要从时间复杂度和空间复杂度来考虑。


  2用贪心算法描述问题


  贪心算法高效地解决了一系列活动争用某一个公共资源的问题,本文主要研究的是n个活动全部安排所需要的最少资源数。面对资源的日益紧缺,如何有效合理地利用资源一直是专家学者研究的热点问题。


  用贪心算法解决本题的思想是:资源足够多,但要使用最少的资源安排全部活动,同时保证每个资源中安排的活动集在时间上不能发生冲突。如果第一个资源中尽可能安排最多的活动,则这个资源得到了充分的利用,而且剩下的活动越少,第二个资源也尽可能安排最多的活动,依次类推。


  以下我们证明该问题具有贪心算法的两个性质:


  (1)活动安排问题具有贪心选择性质


  证明:首先将活动安排问题数学化,设有n个活动的集合 E= { 1 ,2 ,…,n },每个活动 i 都有一个要求使用该资源的起始时问si 和一个结束时问fi 。即k是所需最少资源的个数。设活动已排序,( A1 , A2 , … ,Ak )是所需要的k个已安排了活动的资源。


  ①当k = 1时,也就是所有的活动在一个资源里相容,A1 是满足贪心选择性质的最优解;②当k >= 2时,取B1=A1,BK=Ak (即Bk是安排了m个活动的一个资源,(n-m)个活动都安排在B1 到Bk-1个资源里)。就是(n-m)个活动安排需要(k -1)个资源。则(B1,B2 ,…,Bk-1 )是(n - m)个活动可行解。


  另一方面,由{( A1 ,A2,…,Ak)-Ak}=(B1,B2,…,Bk-1)知,(B1,B2,…,Bk-1)也是满足贪心选择性质的最优解,所以,活动安排问题具有贪心选择性质。


  (2)活动安排问题具有最优子结构性质


  证明:( A1,A2, …,Ak )是n个活动的集合E= {1,2 ,…,n }所需资源的最优解。设A1中安排了m个相容的活动,那么也就是说(n-m)个活动完全安排需要k-1个资源。假设(n - m)个活动安排只需要k-2个资源或则更少的资源。也就是说n个活动安排只需要k-1个资源就可以安排完,则前后出现矛盾。一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。


  3程序清单及复杂性分析


  算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性,由于计算机的快速发展,计算机的空间资源很少作为考虑的对象,目前最为关注的就是时间复杂性。


  利用数组解决活动安排问题。程序的思想:设有n个活动等待安排,这些活动的起始时间和结束时间分别存放在数组 start[]和 finish[]中,定义了一个整型变量flag用于标记活动是否被分配了资源。要对活动的开始时间与已分配的资源里最后被添加进去的活动的结束时间进行比较,如果大于,则把该活动添加进此资源,否则继续与其他资源的最后被添加的活动的结束时间进行比较,如果所有的已分配资源均安排不了,则分配一个新资源来安排此活动。程序清单如下:


  public class needSource{


  ①static int start[] ={1,3,0,5,3,5,6,8,8,2,12};//活动开始时间数组;②static int finish[]={4,5,6,7,8,9,10,11,12,13,14};//活动结束时间数组 public static void main(String[] args) { int i,j,flag=0; int num[]=new int[11];int m[]=new int[100]; //有足够多的资源 int source=1; //初始化,n个活动至少需要一个资源 int n=start.length; //活动的个数(一共有多少个活动) num[0]=1; //num[i]=j;编号为i的活动安排在第j个资源里 m[1]=0; //资源1中最后被添加进来的活动编号是0;③for(i=1;i=finish[m[j]]){ //最后被添加进来的活动结束时间相比;⑥num[i]=j;//把i活动安排在j资源里;⑦m[j]=i; //记录最后被添加到j中的i活动;⑧flag=1; //标记活动已被分配到了资源 };⑨h=j; //j的值是变化的。赋值h以记录值;⑩if(flag==1){//活动被安排了,则跳出循环;break; }};if(flag==1){}else{ num[i]=h+1;//所有的资源都不能安排,则添加新资源 m[h+1]=i; //记录最后添加到j+1中的活动isource++; } flag=0; }System.out.println(source);} }


  结果及分析:程序实现了在控制台打印出所需要资源的个数。运行程序结果显示5,与手工测算结果相同。


  复杂性分析:语句①、②是给数组赋值语句,是0①操作;语句③的循环控制变量i要从1增加到n,故它的频度是n。语句④的循环控制变量j是从1增加到source,但是source无论什么情况下都小于n,则语句④最多循环了(1+2+3+…+n)=(n2)/2,而语句④的循环体中语句⑤因为每次都需要判断,所以频度也是0(n2);语句⑥、⑦、⑧执行的次数是一样的。并且和语句else循环体中的执行次数加起来正好是0(n2);语句⑨、⑩执行次数是0(n2);语句最多执行n次;语句的频度n;该算法中所有语句的频度之和(即算法的时间耗费)为: T(n)=0(1)+ 20(1)+0(n)+0(n2)+0(n2)+30(n2)+20(n2)+20(n);所以时间复杂度是0(n2);


  4结束语


  本文对初步资源规划问题的思考,可以对多个资源组合规划问题的基础研究提供有效的参考作用。目前多个资源组合规划问题在现实研究中仍有许多不尽人意的地方,如何设计实用的算法解决多个资源组合规划问题,是值得我们不断研究探讨的课题。 参考文献:


  [1]肖衡。浅析贪心算法[J].办公自动化杂志,2009(10)。


  [2]常又渠,肖贵元。贪心算法的探讨与研究[J].重庆电力高等专科学校学报,2008(2)。


  [3]王晓东。计算机算法设计与分析[M].北京:电子工业出版社, 2007.


  (责任编辑:余晓)


  Research on Greedy Algorithm to Solve the Activity Arrangement


  Abstract: To use the greedy algorithm solves how to arrange a series of activities with minimal resources. It proves that it is effective to solve this problem with Greedy algorithm and a example go to validate. This paper gives an effective method, which portfolio mix of resources for planning.


  Key Words: Greedy Algorithm; Java program; Complexity Analysis; Activity Arrangements


特别说明:本站仅协助已授权的杂志社进行在线杂志订阅,非《计算机科学与探索》杂志官网,直投的朋友请联系杂志社。
版权所有 © 2009-2024《计算机科学与探索》编辑部  (权威发表网)   苏ICP备20026650号-8