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

2024-11-07 23:45:58
推荐回答(2个)
回答(1):

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si 

在下面所给出的解活动安排问题的贪心算法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

回答(2):

你的会场约束是会议的开始时间和截止时间吗?