• 贪心法多作业调度


    View Code
    #include<iostream>
    using namespace std;
    #define max 100
     
    float d[max];//m台机器的空闲时间存储在d[m]中
    int s[max][max];//把第j个作业放到第i太机器上去运行
     
    typedef struct homework{//数据结构来存储作业信息 
        int ID;
        float time; 
    }hw;
    
    typedef struct m{//快结构体的因为是把在改机器的作业存起来
        int number;//记录存储在改机器的作业个数 
        int ma[max];
        float timesum;
    }mc;
    
    int compare(const void *b1,const void *b2){//比较函数 
        hw *aa=(hw *)b1;
        hw *bb=(hw *)b2;
        return (int)((bb->time)-(aa->time));//降序排序 
    }
    
    
    int schedules(hw *h,int n,int m,mc *machince){
        qsort(h,n,sizeof(hw),compare);//调用系统函数对结构数组排序 
        for(int i=0;i<m;i++){//初始化s[][],把前最大 
            machince[i].timesum=h[i].time;//初始化机器总时间 
            machince[i].number=1;//初始化,每台机器有一个作业 
            machince[i].ma[0]=h[i].ID;
        }
      
        for(int i=m;i<n;i++){
            int temp=1;
            float min=machince[0].timesum;
            for(int k=1;k<m;k++){//找出最先空闲的机器 
                if(min>machince[k].timesum){
                    min=machince[k].timesum;
                    temp=k;//记录最先空闲的机器 ,因为程序从0开始,所以,temp实际应加一 
                }
             } 
             machince[temp].timesum+=h[i].time;
             machince[temp].number++;//增加了一个作业在此机器上运行 
             machince[temp].ma[machince[temp].number-1]=h[i].ID;//把作业加入机器中 
        }
        return 0;
        
    }
    
    int main(){
        hw h[max];//用h[]数组存放作业 
        mc machince[max];
        int n,m;
        cout<<"请输入作业的个数n和机器台数m:"<<endl;
        cin>>n>>m;    
        for(int i=0;i<n;i++){
              cout<<""<<i+1<<" 个作业所需的时间为:";
              cin>>h[i].time;
                 h[i].ID=i+1; 
            } 
        if(m>=n){
            schedules(h,n,m,machince);
            cout<<"做完所需的时间为:"<<h[0].time<<endl<<"把作业随机分到一台机器运行(每台机器一个作业)"<<endl;
            return 0; 
        }       
        else{    
            schedules(h,n,m,machince);
            for(int i=0;i<m;i++){
                cout<<""<<i+1<<" 个机器的作业为:";
                for(int k=0;k<machince[i].number;k++)
                    cout<<machince[i].ma[k]<<" ";
                cout<<endl; 
            }
        } 
        return 0;
        
    }
  • 相关阅读:
    java8大排序
    如何删除oracle 的用户及其数据
    JavaScript开发者常忽略或误用的七个基础知识点
    Vim学习指南
    5个开发人员不应该错过的最好跨平台PHP编辑器
    OpenGL 简介
    web 页面内容优化管理与性能技巧
    创建高性能移动 web 站点
    近期十大优秀jQuery插件推荐
    30本世界名著浓缩成的经典话语
  • 原文地址:https://www.cnblogs.com/aijianiula/p/2763735.html
Copyright © 2020-2023  润新知