实验三 贪心算法 多机调度问题

简介:

基本题一:多机调度问题

一、实验目的与要求

1、熟悉多机调度问题的算法;

2、初步掌握贪心算法;

二、实验题

    要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。

三、实验提示

1、把作业按加工所用的时间从大到小排序

2、如果作业数目比机器的数目少或相等,则直接把作业分配下去

3 如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上s最小的链表加入新作业。

typedef struct Job

{

    int ID;//作业号

    int time;//作业所花费的时间

}Job;

 

typedef struct JobNode //作业链表的节点

{

    int ID;

    int time;

    JobNode *next;

}JobNode,*pJobNode;

 

typedef struct Header  //链表的表头

{

    int s;

    pJobNode next;

}Header,pHeader;

 

int SelectMin(Header* M,int m)

{

    int k=0;

    for(int i=1;i<m;i++)

    {

        if(M[i].s<m[k].s)k=i;

    }

return k;

}

 

四、源代码

#include <vector>

#include <iostream>

#include <algorithm>

using namespace std;

#define N 7

#define M 3

typedef struct job

{

       int ID;

       int time;

}     Job;

typedef struct machine

{

       int ID;

       int avail;

}     Machine;

Job a[N]={{1,2},{2,14},{3,4},{4,16},{5,6},{6,5},{7,3}};       //原始作业数据,from:教材

vector<Job>          m_vec_job;                  

vector<Machine>   m_vec_machine;          

bool UDgreater(Job elem1,Job elem2)

{

       return elem1.time>elem2.time;

}

bool UDless(Machine elem1,Machine elem2)

{

       return elem1.avail<elem2.avail;

}

int main()

{

       if(M>N)

              cout<<"给每个任务分配一台机器即可"<<endl;

       for (int i=0;i<N;i++)

       {

              m_vec_job.push_back(a[i]);

       }

       sort(m_vec_job.begin(),m_vec_job.end(),UDgreater); //作业按时间长度排序完毕

//     cout<<m_vec_job[0].ID<<endl;    //作业是按照时间从大到小排列的

 

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

       {

              Machine tmp={i+1,0};   //机器的编号是从1开始的

              m_vec_machine.push_back(tmp);

       }

 

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

       {

              vector<Machine>::iterator it;

              it = min_element(m_vec_machine.begin(),m_vec_machine.end(),UDless);

              cout<<"将机器"<<(*it).ID<<""<<(*it).avail<<""<<(*it).avail+ m_vec_job[i].time<<"的时间段分配给作业"<<m_vec_job[i].ID<<endl;

              (*it).avail+=m_vec_job[i].time;

       }

       return 0;

}

结果:

 



本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/824847

相关文章
|
4月前
|
算法
2017级《算法设计与分析》--实验1--分治算法-骨牌铺方格
2017级《算法设计与分析》--实验1--分治算法-骨牌铺方格
|
4月前
|
算法
2017级《算法设计与分析》--实验1--分治算法
2017级《算法设计与分析》--实验1--分治算法
|
6月前
|
存储 算法 C语言
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
|
4月前
|
算法 测试技术 编译器
【算法 | 实验18】在字符矩阵中查找给定字符串的所有匹配项
题目描述 题目 在字符矩阵中查找给定字符串的所有匹配项 给定一个M×N字符矩阵,以及一个字符串S,找到在矩阵中所有可能的连续字符组成的S的次数。所谓的连续字符,是指一个字符可以和位于其上下左右,左上左下,右上右下8个方向的字符组成字符串。用回溯法求解。
31 1
|
4月前
|
机器学习/深度学习 算法
【算法 | 实验7】以最小的步骤收集所有硬币(算法正确性还没想清楚)
题目 最小步骤收集硬币 有许多相邻排列的硬币堆。我们需要以最少的步骤收集所有这些硬币,在一个步骤中,我们可以收集一个水平线的硬币或垂直线的硬币,收集的硬币应该是连续的。 输入描述 输入第一行整数N表示硬币堆的数量
35 0
|
1天前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
9 1
|
2月前
|
存储 缓存 网络协议
计算机网络:思科实验【3-集线器与交换机的区别、交换机的自学习算法】
计算机网络:思科实验【3-集线器与交换机的区别、交换机的自学习算法】
|
6月前
|
机器学习/深度学习 存储 算法
【Python机器学习】实验07 KNN最近邻算法2
【Python机器学习】实验07 KNN最近邻算法2
50 0
|
4月前
|
机器学习/深度学习 算法 C++
【算法 | 实验6-1】n*n的网格,从左上角开始到右下角结束遍历所有的方块仅一次,总共有多少种不同的遍历路径
前言 思路介绍中省略了关于如何进行回溯搜索的细节,而主要讨论回溯中所使用的剪枝策略。
59 0
|
4月前
|
tengine 人工智能 算法
极智AI | 量化实验分享四:Data-Free Quantization香不香?详解高通DFQ量化算法实现
大家好,我是极智视界,本文剖析一下高通 DFQ (Data-Free Quantization) 量化算法实现,以 Tengine 的实现为例。
75 1