流水作业调度问题: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);
-
-
- 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)+" ");
- }
-
- }
算法的基本思想是将作业所有的时间从小到大排序,然后从小到大安排。如果时间属于第一个处理机上的就安排在前面,如果属于第二个机器就安排在后面,前提是这个任务没有安排。
点击下载系统:
http://www.myeducs.cn/chaxun/index.html?go=Java实现流水作业调度问题&aa=%CB%D1%CB%F7%C2%DB%CE%C4