多机调度问题【贪心算法】

多机调度问题思路

1.把作业按加工所用的时间从大到小排序
2、如果作业数目比机器的数目少或相等,则直接把作业分配下去
3、 如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上 s 最小的链表加入新作业

可以考虑以下的贪心策略:
(1)最长处理时间作业优先的贪心选择策略。
(2)最短处理时间作业优先的贪心选择策略。
(3)作业到达时间优先的贪心选择策略。

*贪⼼策略:优先处理花费时间长的任务,这样可以减少短任务的等待时间.

问题描述

形式:有n个任务,m台机器,n>m,每个作业i可以选择⼀台设备进⾏加⼯,加⼯时间为ti,每台机器同时只能加⼯⼀个作业,且不可中断。实现作业调度,使得n个作业的等待时间最短。

假定有7个独立作业,所需处理时间分别为{2,14,4,16,6,5,3},由三台机器M1,M2,M3加工。按照贪心算法产生的作业调度如下图所示,所需总加工时间为17.

代码实现【C++】
#include<iostream> 
 
using namespace std;
#define N 7 
#define M 3 
int s[M] = { 0, 0, 0 };
 
 
//求出目前处理作业的时间和 最小的机器号 
int min(int m){
int min = 0;
int i;
for (i = 1; i<m; i++){
if (s[min]>s[i]){
min = i;
}
}
return min;
}
//求最终结果(最长处理时间) 
int max(int s[], int num){
int max = s[0];
for (int i = 1; i<num; i++){
if (max<s[i])
max = s[i];
}
return max;
}
//机器数大于待分配作业数 
int setwork1(int t[], int n){
int i = 0;
for (; i<n; i++){
s[i] = t[i];
}
int ma = max(s, N);
return ma;
}
//机器数小于待分配作业数 
int setwork2(int t[], int n){
int i;
int mi = 0;
for (i = 0; i<n; i++){
mi = min(M);
cout << "接下来由" << mi+1 << "号机器处理任务" << i + 1 << endl;
s[mi] = s[mi] + t[i];
}
int ma = max(s, M);
return ma;
}
void main()  //DEV中是int,vc++6.0中是void
{
	int time[N] = { 16, 14, 6, 5, 4, 3, 2 };//处理时间按从大到小排序 
	int maxtime;
	if (M >= N)
		maxtime = setwork1(time, N);
	else
		maxtime = setwork2(time, N);
	cout << "最多耗费时间" << maxtime << endl;
}
结果

在这里插入图片描述

  • 3
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
多机调度问题是指在有多个独立作业和多台相同的机器的情况下,如何安排作业的调度,使得作业能够在尽可能短的时间内完成。贪心算法是一种常用的解决多机调度问题的方法。 贪心算法的贪心策略是最长处理时间的作业优先,即将处理时间最长的作业分配给最先空闲的机器。这样可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的处理时间。\[1\] 举个例子,假设有7个独立作业{1, 2, 3, 4, 5, 6, 7},需要由3台机器{M1, M2, M3}进行加工处理,各作业所需的处理时间分别为{2, 14, 4, 16, 6, 5, 3}。根据贪心算法,我们可以按照最长处理时间的作业优先的原则,将作业分配给空闲时间最早的机器。具体的作业调度方案可以根据实际情况进行计算。\[2\] 贪心算法的求解思路是先对作业的处理时间进行排序,然后按照贪心策略依次将作业分配给空闲时间最早的机器。最终得到的作业调度方案可以近似地得到最优解。\[3\] 总结起来,多机调度问题贪心算法是一种有效的解决方法,通过将处理时间最长的作业优先分配给最先空闲的机器,可以在尽可能短的时间内完成作业的加工处理。 #### 引用[.reference_title] - *1* [求解多机调度问题 —— 贪心算法](https://blog.csdn.net/Ennd_me/article/details/118343115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【贪心法】多机调度问题](https://blog.csdn.net/weixin_42260102/article/details/95971105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [多机调度问题 贪心算法解决 C++](https://blog.csdn.net/weixin_56727452/article/details/125146940)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力努力在努力(奋斗版)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值