关于活动安排算法

原创 2013年12月05日 10:25:37

描述:

设有n个活动的集合E={1,2,.....,n},其中每个活动都要求使用同一个资源(如演讲会场),而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间Si和一个结束时间Fi,且Si<Fi。如果选择了活动i,则他在改时间区间[Si,Fi]内占用资源,若区间[Si,Fi] 和区间[Sj,Fj]不相交,则称活动i与活动j是相容的。活动安排问题是要求在所给的活动集合范围内选出最大的相容的活动子集。

贪心算法与动态规划的不同之处:

上次写的背包问题解决方法是动态规划,其实有的人一看到0-1背包问题时第一反应就是使用贪心法来解决问题但是贪心法求的结果并不一定就是最优解,下面是贪心算法活动安排的例子

问题分析:

查找每个活动的结束时间,每一次选择时查找具有最早结束时间的相容的活动,先把n个活动按时间的结束时间非减序排列,这样,贪心选择是取当前活动集合中结束时间最早的活动就归结为取当前活动集合中排在最前面的活动

#include<stdio.h>

void sort(int s[],int f[],int n)//把各个活动的起始时间和结束时间按结束时间递增排序

{

    int a,b;

    int i,j;

    for(i=0;i<n;i++)

    {

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

        {

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

            {a=f[i];f[i]=f[j];f[j]=a;

            b=s[i];s[i]=s[j];s[j]=b;}

        }

    }

}

int activemanage(int s[],int f[],bool a[],int n)

{

    a[0]=1;

    int i;

    int j=1,count=1;

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

    {

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

        {

            a[i]=1;

            j=i;

            count++;

        }

        else a[i]=0;

    }

    return count;

}

 

void main()

{

    int i,n;

    int p;

    int s[100],f[100];

    bool a[100];

    printf("输入节目数:\n");

    scanf("%d",&n);

    printf("请依次输入节目的开始和结束时间\n");

    for(i=0;i<n;i++)

    {

        scanf("%d %d",&s[i],&f[i]);

    }

    sort(s,f,n);

    p=activemanage(s,f,a,n);

    printf("安排的节目个数为:%d\n",p);

    printf("节目的选取情况为(0表示不选 1表示选取):\n");

    for(i=0;i<n;i++)

        printf("%d ",a[i]);

    printf("\n");

}

 

结果:

输入节目书:

3

请依次输入节目的开始时间和结束时间

4:00 4:20 4:30 4:40 4:50 5:10

安排的节目个数为:3

节目的选取情况为<0表示不选,1表示选取>

1 1 1

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

活动安排算法

  • 2008-06-21 08:19
  • 51KB
  • 下载

活动安排问题(贪心算法)

类似的问题是:选点问题和区间覆盖问题。 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提...

算法设计与分析 活动安排

  • 2013-10-08 19:30
  • 2.36MB
  • 下载

活动安排算法 event.java

  • 2011-09-09 22:42
  • 552B
  • 下载

贪心算法之活动安排问题

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

贪心算法——活动安排

问题描述:活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可...

活动安排算法

  • 2008-06-12 20:59
  • 48KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)