流水作业调度
来源:互联网 发布:网络兼职干什么好 编辑:程序博客网 时间:2024/05/17 22:56
#include<stdio.h>
#include<iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
#define random(x) (rand()%x)
typedef struct {
int key; //以Ai还是Bi作为关键字排序
bool job;//标志是Ai>Bi还是Ai<Bi型,从而分别归在N1或N2集合中
int index;//将它作为第index个作业
}JobType;
void BubbleSort(JobType * R,int n)//冒泡排序
{
int i,j;
JobType temp;
bool exchange; //交换标志
for(i = 0;i < n;i ++){ //最多做n-1趟排序
exchange = false; //本趟排序开始前,交换标志应为假
for(j = n - 1;j >= i;j --)
if(R[j+1].key < R[j].key){
temp = R[j+1];
R[j+1] = R[j];
R[j] = temp;
exchange=true; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
}
}
int FlowShop(int n, int *a, int *b, int *c)
//n为作业数,a、b为数组,分为放n个作业在机器M1和M2上执行的时间,c数组存放最优流水次序
{
JobType d[4];
for (int i=0; i<n; i++) {
d[i].key = a[i]>=b[i] ? b[i] : a[i];//key值保存较小者
d[i].job = a[i]<b[i];//将作业分为N1和N2两组
d[i].index = i;
}
BubbleSort(d,n);//对n个作业以其key值升序排列
int j=0, k=n-1;
for (i=0; i<n; i++) {
if (d[i].job) c[j++] = d[i].index;
else c[k--] = d[i].index;
}
printf("最优次序为:");
for (i=0; i<n; i++) {
printf("%d ",c[i] + 1);
}
//计算按最优次序执行作业的时间
j = a[c[0]];
k = j + b[c[0]];
for (i = 1; i < n; i++) {
j += a[c[i]];
k = j < k ? k + b[c[i]] : j + b[c[i]];
}
return k;
}
void Compare(int n, int *a, int *b, int *c)//n为作业数,a、b为数组,分为放n个作业在机器M1和M2上执行的时间,c数组存放流水次序
{
int j=4,p,q,t;
//对作业的调度次序随机排序
while(j--)
{
p=rand()%4;
q=rand()%4;
t=c[p];
c[p]=c[q];
c[q]=t;
}
printf("加工次序为:");
for (int i=0; i<n; i++) {
printf("%d ",c[i]+1);
}
//计算按此加工次序用的时间
j = a[c[0]];
int k = j+b[c[0]];
for (i=1; i<n; i++) {
j+= a[c[i]];
k = j<k ? k+b[c[i]] : j+b[c[i]];
}
printf("\n加工时间为:%d",k);
}
void main(){
int n;//作业数
int *a;//存放每个作业在M1上加工的时间
int * b;//存放每个作业在M2上加工的时间
int *c;//存放最优次序
char m ;//保存是否要比较
printf("输入作业数:");
scanf("%d",&n);
a = new int[n];
b = new int[n];
c = new int[n];
printf("输入每个作业在M1上加工的时间:");
for(int i = 0;i < n;i++)
scanf("%d",&a[i]);
printf("输入每个作业在M2上加工的时间:");
for(i = 0;i < n;i++)
scanf("%d",&b[i]);
printf("\n最少加工时间为:%d\n",FlowShop(n,a,b,c));
printf("\n要比较吗?(Y/N)");
scanf("%s",&m);
while(m == 'Y')
{
Compare(n,a,b,c);
printf("\n要比较吗?(Y/N)");
scanf("%s",&m);
}
delete a;
delete b;
delete c;
}
#include<iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
#define random(x) (rand()%x)
typedef struct {
int key; //以Ai还是Bi作为关键字排序
bool job;//标志是Ai>Bi还是Ai<Bi型,从而分别归在N1或N2集合中
int index;//将它作为第index个作业
}JobType;
void BubbleSort(JobType * R,int n)//冒泡排序
{
int i,j;
JobType temp;
bool exchange; //交换标志
for(i = 0;i < n;i ++){ //最多做n-1趟排序
exchange = false; //本趟排序开始前,交换标志应为假
for(j = n - 1;j >= i;j --)
if(R[j+1].key < R[j].key){
temp = R[j+1];
R[j+1] = R[j];
R[j] = temp;
exchange=true; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
}
}
int FlowShop(int n, int *a, int *b, int *c)
//n为作业数,a、b为数组,分为放n个作业在机器M1和M2上执行的时间,c数组存放最优流水次序
{
JobType d[4];
for (int i=0; i<n; i++) {
d[i].key = a[i]>=b[i] ? b[i] : a[i];//key值保存较小者
d[i].job = a[i]<b[i];//将作业分为N1和N2两组
d[i].index = i;
}
BubbleSort(d,n);//对n个作业以其key值升序排列
int j=0, k=n-1;
for (i=0; i<n; i++) {
if (d[i].job) c[j++] = d[i].index;
else c[k--] = d[i].index;
}
printf("最优次序为:");
for (i=0; i<n; i++) {
printf("%d ",c[i] + 1);
}
//计算按最优次序执行作业的时间
j = a[c[0]];
k = j + b[c[0]];
for (i = 1; i < n; i++) {
j += a[c[i]];
k = j < k ? k + b[c[i]] : j + b[c[i]];
}
return k;
}
void Compare(int n, int *a, int *b, int *c)//n为作业数,a、b为数组,分为放n个作业在机器M1和M2上执行的时间,c数组存放流水次序
{
int j=4,p,q,t;
//对作业的调度次序随机排序
while(j--)
{
p=rand()%4;
q=rand()%4;
t=c[p];
c[p]=c[q];
c[q]=t;
}
printf("加工次序为:");
for (int i=0; i<n; i++) {
printf("%d ",c[i]+1);
}
//计算按此加工次序用的时间
j = a[c[0]];
int k = j+b[c[0]];
for (i=1; i<n; i++) {
j+= a[c[i]];
k = j<k ? k+b[c[i]] : j+b[c[i]];
}
printf("\n加工时间为:%d",k);
}
void main(){
int n;//作业数
int *a;//存放每个作业在M1上加工的时间
int * b;//存放每个作业在M2上加工的时间
int *c;//存放最优次序
char m ;//保存是否要比较
printf("输入作业数:");
scanf("%d",&n);
a = new int[n];
b = new int[n];
c = new int[n];
printf("输入每个作业在M1上加工的时间:");
for(int i = 0;i < n;i++)
scanf("%d",&a[i]);
printf("输入每个作业在M2上加工的时间:");
for(i = 0;i < n;i++)
scanf("%d",&b[i]);
printf("\n最少加工时间为:%d\n",FlowShop(n,a,b,c));
printf("\n要比较吗?(Y/N)");
scanf("%s",&m);
while(m == 'Y')
{
Compare(n,a,b,c);
printf("\n要比较吗?(Y/N)");
scanf("%s",&m);
}
delete a;
delete b;
delete c;
}
- 流水作业调度
- 流水作业调度
- 流水作业调度问题(转)
- 最优流水作业调度
- 最优流水作业调度
- 流水作业调度-动态规划
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度(dp)
- dp:流水作业调度问题
- Java实现流水作业调度问题
- 流水作业调度的Johnson 算法
- 流水作业调度(动态规划)
- 动态规划-3.8流水作业调度
- 流水作业调度问题 Johnson 算法
- JDK1.5的新特性
- 单源最短路径
- contentSize、contentInset和contentOffset区别
- android 2.3源码 下载与编译 以前我让我小弟写的,今天看到就转了
- 【Django tutorial1】
- 流水作业调度
- plsql学习范例--使用utl_file包将查询结果输出到文件中
- 哈夫曼编码
- 嵌入式Linux系统下I2C设备驱动程序的开发
- 0-1背包 动态规划
- 求质数算法的N种境界 (N > 10)
- Android 系统启动过程
- Windows核心编程<读书笔记九>线程与内核对象的同步
- android读取文件