贪心法(02组合问题)多机调度问题

该代码实现了一个最长处理时间优先的作业分配算法,当机器数量小于任务数量时,按照作业的处理时间从大到小进行排序,并分配给最先空闲的处理机。程序使用了队列数据结构来存储每台机器处理的作业。
摘要由CSDN通过智能技术生成

最长处理时间的作业优先,当机器数量小于任务数量
将n个作业按照所需时间从大到小排序,然后依此顺序将作业分配给最先空闲的处理机
t[n] n个作业的处理时间
d[m]m台机器的空闲时间
S[m]集合数组 存储每台机器所处理的作业,
其中S[i]表示机器i所处理的作业
rear[i]为队列S[i]当前的队尾下标
1.代码

#include<windows.h>
#include <iostream>
using namespace std;
#include <string.h>


const int n = 7;
const int m = 3;
void MultiMachine(int t[ ], int n, int d[ ], int m);

int main( )
{
	int t[n] = {16, 14, 6, 5, 4, 3, 2};
	int d[m] = {0};
    MultiMachine(t, n, d, m);
	Sleep(80000);
	return 0;
}

void MultiMachine(int t[ ], int n, int d[ ], int m)
{  //假设3台机器处理7个作业
	int S[3][7], rear[3];     //S[i]为存储机器i处理作业的队列,rear[i]为队尾下标
	int i, j, k;
	for (i = 0; i < m; i++)          //安排前m个作业
	{
		S[i][0] = i; rear[i] = 0;     //每个作业队列均只有一个作业
		d[i] = t[i];
	}
	for (i = m; i < n; i++)             //依次安排余下的每一个作业
	{
		for (j = 0, k = 1; k < m; k++)   //查找最先空闲的机器
			if (d[k] < d[j]) j = k;
		rear[j]++; S[j][rear[j]] = i;     //将作业i插入队列S[j]
		d[j] = d[j] + t[i];
	}
	for (i = 0; i < m; i++)               //输出每个机器处理的作业
	{
		cout<<"机器"<<i<<":";
		for (j = 0; S[i][j] >= 0; j++)
			cout<<"作业"<<S[i][j]<<"  ";
		cout<<endl;
	}
}

2.结果示例
(

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值