批处理作业调度
来源:互联网 发布:中国软件培训网 编辑:程序博客网 时间:2024/05/20 20:47
#include "stdio.h"#include "stdlib.h"#define MAX 10#define INF 10000int n; //作业个数int m[MAX][3]; //第一列表示作业在机器1上运行时间,第二列表示作业在机器2上运行时间int f1; //机器1完成的时间int f2[MAX]; //机器2完成的时间int f; //最终完成时间int bestf; //最优最终完成时间int x[MAX]; //作业调度顺序int bestx[MAX]; //最佳作业调度顺序void swap(int &x, int &y){ int temp = x; x = y; y = temp;}//搜索排列树,寻求最优解void backtrack(int i){ if(i>n) //如果搜索到叶结点 { int j; for(j=1; j<=n; j++) bestx[j] = x[j]; bestf = f; } else //如果还有其它结点未搜索到 { int j; for(j=i; j<=n; j++) //考察当前结点下,第i步选择作业x[j] { f1 += m[x[j]][1]; //机器1完成时间 + 作业x[j]在机器1上完成时间 //因为作业先在机器1上运行,再在机器2上运行,所以机器2的完成时间不可能早于机器1 f2[i] = (f2[i-1]>f1?f2[i-1]:f1) + m[x[j]][2]; //机器2完成时间 + 作业x[i]在机器2上完成时间 f += f2[i]; //更新总完成时间 if(f<bestf) //剪枝处理,如果当前的最优解比前面得到的最优解更好 { swap(x[i], x[j]); //将第i步的作业选为x[j] backtrack(i+1); swap(x[i], x[j]); //返回上一个结点 } f1 -= m[x[j]][1]; //返回上一个结点 f -= f2[i]; //返回上一个结点 } }}//安排作业最优调度,使所有作业完成时间最短void flow(int m1[][3], int n1){ n = n1; int i, j; for(i=0; i<=n; i++) //作业运行时间 for(j=0; j<3; j++) m[i][j] = m1[i][j]; f = f1 = 0; //总完成时间,机器1完成时间 bestf = INF; //最优总完成时间 for(i=0; i<=n; i++) { x[i] = i; //作业调度 f2[i] = 0; //机器2完成时间 } backtrack(1);}int main(){ int n1 = 3; int m1[][3] = { {0, 0, 0}, {0, 2, 1}, {0, 3, 1}, {0, 2, 3} }; int i; flow(m1, n1); //安排作业最优调度 printf("作业在机器1上完成时间依次为:"); for(i=1; i<=n; i++) printf("%d ", m[x[i]][1]); printf("\n"); printf("作业在机器2上完成时间依次为:"); for(i=1; i<=n; i++) printf("%d ", m[x[i]][2]); printf("\n"); printf("最优调度为:\n"); for(i=1; i<=n; i++) printf("%d ", bestx[i]); printf("\n"); printf("完成时间为:%d\n", bestf); return 0;}
0 0
- 批处理作业调度
- 批处理作业调度
- 批处理作业调度问题
- 批处理作业调度
- 批处理作业调度
- 算法 批处理作业调度
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度
- 批处理作业调度问题
- 批处理作业调度-----回溯法
- 批处理作业调度(回溯)
- 批处理作业调度(回溯)
- 回溯法--批处理作业调度
- JavaScript 批处理系统中作业调度【操作系统】
- 【回溯法】批处理作业调度问题
- Cocoapods完整使用
- 如何卸载Ubuntu软件
- SQL INSERT INTO 语句
- xcode7在真机调试的时候出现"The identity used to sign the executable is no longer valid"
- EXTJS组件化浅谈
- 批处理作业调度
- CABasicAnimation
- SQL UPDATE 语句
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- JSTL c标签使用及概述
- 詩經甲骨文解讀:桑中(國風)
- socket通讯原理以及tcp、ip三次握手机制分析
- Android 之 ViewDragHelper 详解
- 谋略和勇略