请高手进来解答一下这道算法设计与分析的题目,谢谢了!!

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的 贪心算法进行安排。
备注:如果觉得程序有点繁琐的话就不用写出程序了,只要写出算法的思想就好了,不过要写详细一些,要有具体的表达式等,再次说声谢谢!!

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。

在下面所给出的解活动安排问题的贪心算法greedySelector :

public static int greedySelector(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;

        }

      return count;

   }

    由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。

    算法greedySelector的效率极高。当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。 

例:设待安排的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

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-24
你的会场约束是会议的开始时间和截止时间吗?
相似回答