>贪心算法

贪心算法的多机调度问题

//Job Node (greedy)
#include <stdio.h>
void JobNode( int job[] , int machine[] , int n , int m )
{
    int i , j , t , flag = 0 , max , min ,k = 1;
    for( i = 1 ; i < n ; i++ )          //little to big sort
        for( j = i+1 ; j <= n ; j++ )
            if( job[i] > job[j] )
            {

                t = job[i] ;
                job[i] = job[j] ;
                job[j] = t ;
            }
    for( i = 1 ; i <= m ; i++ )
        machine[i] = 0;
    if( m < n )     //machine is not enough need attemper
    {
        for( i =1 ; i <= m ; i++ )
            machine[i] = job[i] ;
        for( i = m+1 ; i <= n ; i++ )
        {
            min = machine[1] ;
            for( j = 2 ; j <= m ; j++ )
                if( machine[j] < min )      //chose the min time to add the job time
                {
                    min  = machine[j] ;
                    k = j;
                }
            machine[k] = machine[k] + job[i] ;  //make the job in the number k  machine
        }
        max = machine[1] ;
        for( i = 2 ; i <= m ; i++ )     //when the job finashed,choose the max time,that is all job working time
            if( machine[i] > max )
                max = machine[i] ;
    }   
    else        //machine is enough
    {
        for( i = 1 ; i <= n ; i++ )
            machine[i] = job[i] ;
        max  = job[n] ;     //choose the after sort's job time
    }
    printf( "the machine's working time is:\n" ) ;
    for( i = 1 ; i <= m ; i++ )
        printf( "%d ",machine[i] );
    printf( "\nthe time is : %d\n",job[n] ) ;
}

int main(void)
{
    int n , m , i ;
    printf( "please input the number of job n and the number of machine m:\n" ) ;
    scanf( "%d %d",&n,&m ) ;
    int job[n+1] , machine[m+1] ;
    printf( "please input job's time\n" ) ;
    for(i = 1;i <= n;i++)
        scanf( "%d",&job[i] ) ;
    JobNode(job,machine,n,m) ;  
    return 0;
}

贪心算法一般需要先进行排序,本题中需要先将每个作业的工作时间进行由小大大排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值