计算机算法分析与设计(13)---贪心算法(多机调度问题)

文章目录


一、问题概述

1.1 思路分析

 1. 设有 n n n 个独立的作业 1 , 2 , ... , n {1, 2, ..., n} 1,2,...,n,由 m m m 台相同的机器 M 1 , M 2 , ... , M m {M_1, M_2, ..., M_m} M1,M2,...,Mm 进行加工处理,作业 i i i 所需的处理时间为 t i ( 1 ≤ i ≤ n ) t_i(1≤i≤n) ti(1≤i≤n),每个作业均可在任何一台机器上加工处理,但不可间断、拆分。多机调度问题要求给出一种作业调度方案,使所给的 n n n 个作业在尽可能短的时间内由 m m m 台机器加工处理完成。

 2. 解决思路:(1)如果 n < m n<m n<m,这种情况很简单,将 n n n 个作业分配给 m m m 个机器中的 n n n 个就可以了。(2)如果 n > m n>m n>m,则用贪心算法求解。

 3. 贪心算法求解多机调度问题的贪心策略是最长处理时间的作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的处理时间。

1.2 实例分析

 设 7 7 7 个独立作业 1 , 2 , 3 , 4 , 5 , 6 , 7 {1, 2, 3, 4, 5, 6, 7} 1,2,3,4,5,6,7 由 3 3 3 台机器 M 1 , M 2 , M 3 {M1, M2, M3} M1,M2,M3 加工处理,各作业所需的处理时间分别为 2 , 14 , 4 , 16 , 6 , 5 , 3 {2, 14, 4, 16, 6, 5, 3} 2,14,4,16,6,5,3。贪心算法产生的作业调度如下图所示。所需要的加工时间为17。

二、代码编写

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

bool compare(int a,int b)
{
	return a>b;

}
 
int main(){
	int n,m; //作业个数为n, 机器个数为m
	
	cout<<"请输入作业和机器的个数:"<<endl; 
	cin>>n>>m;
	
	vector<int> time(n);
	//vector<vector<int> > machine(m); //理解成m×1二维数组 
	vector<int> sumTime(m,0); //0表示初始化值为0 
	
	cout<<"请输入每个作业的处理时间:"<<endl; 
	for(int i=0;i<n;i++)
	{
		cin>>time[i];
	}
	sort(time.begin(),time.end(),compare); //对time进行排序,从大到小。
	
	for(int i=0;i<n;i++)
	{
		int select=0;
		for(int j=0;j<m;j++)
		{
			if(sumTime[j]<sumTime[select])
			{
				select=j;
			}
		}
		
		//machine[select].push_back(time[i]);
		sumTime[select]=sumTime[select]+time[i];	
	}
	
	int maxTime=sumTime[0];
	for(int j=0;j<m;j++)
	{
		if(sumTime[j]>maxTime)
		{
			maxTime=sumTime[j];
		}
	}
	for(int j=0;j<m;j++)
	{
		cout<<"第"<<j+1<<"台机器所需处理总时间为: "<<sumTime[j]<<endl; 
	}
	
	cout<<"处理所有作业时间共需: "<<maxTime;
	return 0;
}
相关推荐
Jerry1 天前
LeetCode 101. 对称二叉树
算法
可编程芯片开发1 天前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星1 天前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮1 天前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
肖爱Kun1 天前
C++设计策略模式
开发语言·c++·策略模式
dream_home84071 天前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>1 天前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
炸膛坦客1 天前
单片机/C/C++八股:(二十四)编译文件( .bin 和 .hex ,包括 .elf 和 .axf )
c语言·c++·单片机
To_OC1 天前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC1 天前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode