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

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。备注:如果觉得程序有点繁琐的话就不用写出程序了,只要写出算法的思想就好了,不... 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的 贪心算法进行安排。
备注:如果觉得程序有点繁琐的话就不用写出程序了,只要写出算法的思想就好了,不过要写详细一些,要有具体的表达式等,再次说声谢谢!!
展开
 我来答
gongzhiwei80
2011-11-24
知道答主
回答量:3
采纳率:0%
帮助的人:3.2万
展开全部

设有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

neulinux
2011-11-24 · TA获得超过906个赞
知道小有建树答主
回答量:627
采纳率:0%
帮助的人:312万
展开全部
你的会场约束是会议的开始时间和截止时间吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式