当前位置:   article > 正文

算法——贪心法——多机调度问题_算法设计实验多机调度代码

算法设计实验多机调度代码
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct job{
  4. int order; //作业序号
  5. int time; //作业所需时间
  6. }job;
  7. //比较函数
  8. //int Compare(const void* _a, const void* _b) {
  9. // job* a = (job*)_a;
  10. // job* b = (job*)_b;
  11. // return b->time - a->time; //从大到小
  12. //}
  13. int Compare(const void* x, const void* y) { //从大到小
  14. return (((job*)y)->time - ((job*)x)->time); //void*表示空类型的指针(泛型指针),可以接收来自任何类型的元素地址,
  15. } //对于指针的比较,我们必须要将指针强制转化为相应的数据类型,比如排列结构体型数据,就将两指针强制转为 (struct*);
  16. void MultiMachine(job t[], int n, int d[], int m, int p[]){
  17. int S[m][n]; //三台机器七个作业
  18. int rear[m]; //S[i]为第 i台机器的处理作业队列,rear[i]为队尾下标
  19. int i, j, k;
  20. for(i=0;i<m;i++){ //安排前 m个作业
  21. S[i][0]=p[i];
  22. rear[i]=0;
  23. d[i]=t[i].time;
  24. }
  25. for(i=m;i<n;i++){
  26. for(j=0,k=1;k<m;k++){
  27. if(d[k]<d[j]) //查找空闲时间最少的机器
  28. j=k;
  29. }
  30. rear[j]++; //新增作业,对位下标后移
  31. S[j][rear[j]]=p[i]; //第 j台机器的下一个作业为 i
  32. d[j]=d[j]+t[i].time;
  33. }
  34. for(i=0;i<m;i++){ //输出每个机器处理的作业
  35. printf("机器M %d 作业 :", i+1);
  36. for(j=0;j<=rear[i];j++)
  37. printf(" %d",S[i][j]+1);
  38. printf(" 加工时间 : %d", d[i]);
  39. printf("\n");
  40. }
  41. }
  42. int main(){
  43. int m,n;
  44. printf("请输入机器数量和作业数量 : ");
  45. scanf("%d %d", &m, &n);
  46. job t[n]; //结构体数组
  47. int p[n];
  48. int d[m];
  49. int i, j, k;
  50. for(i=0;i<m;i++){
  51. d[i]=0;
  52. }
  53. for(j=0;j<n;j++){
  54. t[j].order=j;
  55. printf("t[%d]:",j+1);
  56. scanf("%d", &t[j].time);
  57. }
  58. qsort(t, n, sizeof(job), Compare); //快排函数
  59. for(j=0;j<n;j++){
  60. p[j]=t[j].order; //排序后各位置对应作业序号
  61. }
  62. printf("\n");
  63. MultiMachine(t, n, d, m, p);
  64. return 0;
  65. }

将数组t[n]进行排序,其时间性能为O(nlogn),完成前m个作业的分配,其时间性能为O(m),完成后n-m个作业的分配,操作“数组d[m]中最小值对应的下标”如果采用蛮力法查找,其时间性能为O(m),则算法的时间性能为 : T(n)=m+(n-m)*m,通常情况下m<<n,算法时间复杂度为O(m*n)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/284733
推荐阅读