Java实现流水作业调度问题
2011-12-05 21:43
645 查看
【作者:孟祥月 博客:http://blog.csdn.net/mengxiangyue】
流水作业调度问题:n个作业要求在两个机器上处理,要求先在第一个上处理,然后再在第二个处理器上处理,求如何安排使得完成后最后时间最短。
下面是程序代码:
如果哪里错了还请指出。
流水作业调度问题:n个作业要求在两个机器上处理,要求先在第一个上处理,然后再在第二个处理器上处理,求如何安排使得完成后最后时间最短。
下面是程序代码:
import java.util.ArrayList; import java.util.Collections; class RenWu { private int first;//第一个用的时间 private int second;//第二个用的时间 private boolean flag = false;//标志是否分配了 public RenWu(int first, int second) { this.first = first; this.second = second; } public int getFirst() { return first; } public void setFirst(int first) { this.first = first; } public int getSecond() { return second; } public void setSecond(int second) { this.second = second; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } } class ShiJian implements Comparable { @Override public String toString() { return "ShiJian [time=" + time + ", shuYu=" + shuYu + ", diJiXiang=" + diJiXiang + "]"; } public ShiJian(int time, int shuYu, int diJiXiang) { super(); this.time = time; this.shuYu = shuYu; this.diJiXiang = diJiXiang; } private int time;//所用的时间 private int shuYu;//代表属于第几个作业 private int diJiXiang;//代表是第几个流水线上的时间 public int getTime() { return time; } public void setTime(int time) { this.time = time; } public int getShuYn() { return shuYu; } public void setShuYn(int shuYn) { this.shuYu = shuYn; } public int getDiJiXiang() { return diJiXiang; } public void setDiJiXiang(int diJiXiang) { this.diJiXiang = diJiXiang; } @Override public int compareTo(Object arg0) { ShiJian obj = (ShiJian)arg0; return this.time>obj.getTime()?1:(this.time==obj.getTime()?0:-1); } } public class liushuizuoye { public static void main(String[] args) { RenWu[] renWu = new RenWu[6]; renWu[0] = new RenWu(3,8); renWu[1] = new RenWu(12,10); renWu[2] = new RenWu(5,9); renWu[3] = new RenWu(2,6); renWu[4] = new RenWu(9,3); renWu[5] = new RenWu(11,1); ArrayList list = new ArrayList();//时间队列 //将时间加入到时间队列 for(int i = 0;i<6;i++) { list.add(new ShiJian(renWu[i].getFirst(),i,1)); list.add(new ShiJian(renWu[i].getSecond(),i,2)); } Collections.sort(list); // for(int i = 0;i<list.size();i++) // System.out.println((ShiJian)list.get(i)); int[] result = new int[6]; int start =0;int end = 5; for(int i = 0;i<list.size();i++) { ShiJian shijian = (ShiJian)list.get(i); int num = shijian.getShuYn();//得到属于第几项任务 if(!renWu[num].isFlag())//如果未分配则分配 { if(shijian.getDiJiXiang() == 1)//表示的是第一项 { result[start] = num; start++; renWu[num].setFlag(true); } else//如果是第二个时间 { result[end] = num; end--; renWu[num].setFlag(true); } } } System.out.println("流水作业的时间是:"); for(int i = 0;i<6;i++) System.out.print((result[i]+1)+" "); } }算法的基本思想是将作业所有的时间从小到大排序,然后从小到大安排。如果时间属于第一个处理机上的就安排在前面,如果属于第二个机器就安排在后面,前提是这个任务没有安排。
如果哪里错了还请指出。
相关文章推荐
- 算法java实现--动态规划--流水作业调度问题
- 算法java实现--贪心算法--多机调度问题
- 基于JavaScript实现流水作业调度问题
- 最佳调度问题的回溯算法(java实现)
- 流水作业调度问题JAVA代码
- 每天一道算法题(一) (动态规划算法)背包问题Java实现
- mybatis和JPA实现乐观锁解决并发问题-阿里巴巴JAVA开发手册详细解读
- JAVA实现矩阵连乘问题
- java用list实现约瑟夫环问题
- (转)生产者/消费者问题的多种Java实现方式 (待整理)
- 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)
- Java实现两个线程交替打印问题
- 蚁群算法java实现以及TSP问题蚁群算法求解
- java实现生产者消费者问题(转)
- Java-解决实现JPA的hibernate自动建表的编码问题
- jcifs实现Java+AD的SSO解决方案,碰到的问题
- Java 实现Excel表数据的读取和写入 以及过程中可能遇到的问题
- JAVA实现定时调度任务
- 数据结构与算法分析笔记与总结(java实现)--链表4:单调链表合并问题
- 数据结构与算法分析笔记与总结(java实现)--链表9:有序环形链表中插入新结点问题