網(wǎng)站首頁(yè) 編程語言 正文
多機(jī)調(diào)度問題思路
1、把作業(yè)按加工所用的時(shí)間從大到小排序
2、如果作業(yè)數(shù)目比機(jī)器的數(shù)目少或相等,則直接把作業(yè)分配下去
3、 如果作業(yè)數(shù)目比機(jī)器的數(shù)目多,則每臺(tái)機(jī)器上先分配一個(gè)作業(yè),如下的作業(yè)分配時(shí),是選那個(gè)表頭上 s 最小的鏈表加入新作業(yè)
可以考慮以下的貪心策略:
(1)最長(zhǎng)處理時(shí)間作業(yè)優(yōu)先的貪心選擇策略。
(2)最短處理時(shí)間作業(yè)優(yōu)先的貪心選擇策略。
(3)作業(yè)到達(dá)時(shí)間優(yōu)先的貪心選擇策略。
*貪?策略:優(yōu)先處理花費(fèi)時(shí)間長(zhǎng)的任務(wù),這樣可以減少短任務(wù)的等待時(shí)間.
問題描述
形式:有n個(gè)任務(wù),m臺(tái)機(jī)器,n>m,每個(gè)作業(yè)i可以選擇?臺(tái)設(shè)備進(jìn)?加?,加?時(shí)間為ti,每臺(tái)機(jī)器同時(shí)只能加??個(gè)作業(yè),且不可中斷。實(shí)現(xiàn)作業(yè)調(diào)度,使得n個(gè)作業(yè)的等待時(shí)間最短。
假定有7個(gè)獨(dú)立作業(yè),所需處理時(shí)間分別為{2,14,4,16,6,5,3},由三臺(tái)機(jī)器M1,M2,M3加工。按照貪心算法產(chǎn)生的作業(yè)調(diào)度如下圖所示,所需總加工時(shí)間為17.
代碼實(shí)現(xiàn)【C++】
#include<iostream>
using namespace std;
#define N 7
#define M 3
int s[M] = { 0, 0, 0 };
//求出目前處理作業(yè)的時(shí)間和 最小的機(jī)器號(hào)
int min(int m){
int min = 0;
int i;
for (i = 1; i<m; i++){
if (s[min]>s[i]){
min = i;
}
}
return min;
}
//求最終結(jié)果(最長(zhǎng)處理時(shí)間)
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;
}
//機(jī)器數(shù)大于待分配作業(yè)數(shù)
int setwork1(int t[], int n){
int i = 0;
for (; i<n; i++){
s[i] = t[i];
}
int ma = max(s, N);
return ma;
}
//機(jī)器數(shù)小于待分配作業(yè)數(shù)
int setwork2(int t[], int n){
int i;
int mi = 0;
for (i = 0; i<n; i++){
mi = min(M);
cout << "接下來由" << mi+1 << "號(hào)機(jī)器處理任務(wù)" << 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 };//處理時(shí)間按從大到小排序
int maxtime;
if (M >= N)
maxtime = setwork1(time, N);
else
maxtime = setwork2(time, N);
cout << "最多耗費(fèi)時(shí)間" << maxtime << endl;
}
結(jié)果
原文鏈接:https://blog.csdn.net/weixin_55764157/article/details/124519097
相關(guān)推薦
- 2022-09-17 C++?如何實(shí)現(xiàn)順序棧(使用模板類)_C 語言
- 2022-11-09 PostgreSQL索引掃描時(shí)為什么index?only?scan不返回ctid_PostgreSQ
- 2022-11-27 C語言中花式退出程序的方式總結(jié)_C 語言
- 2021-12-15 使用Redis實(shí)現(xiàn)令牌桶算法原理解析_Redis
- 2022-03-08 android?studio組件通信:Intend啟動(dòng)Activity接收返回結(jié)果_Android
- 2022-07-19 Python數(shù)據(jù)分析?Numpy?的使用方法_python
- 2022-08-25 C++淺析STL?迭代器?容器的使用_C 語言
- 2022-05-08 關(guān)于PyQt5中QtGui.QImage圖片顯示問題解析_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支