算法java实现--动态规划--流水作业调度问题

流水作业调度问题算法的java实现(动态规划法)

具体问题描述以及C/C++实现参见网址

http://blog.csdn.net/liufeng_king/article/details/8678316

/**
 * 流水布线问题(动态规划)
 * @author Lican
 *
 */
public class Johnson {
	public int[] a;
	public int[] b;
	public int[] c;
	public Johnson(int[] aa,int[] bb){
		this.a=aa;
		this.b=bb;
		this.c= new int[aa.length];
	}
	private static class Element implements Comparable{
		int key;
		int index;
		boolean job;
		public Element(int kk,int ii,boolean jobs){
			key = kk;
			index = ii;
			job = jobs;
		}
		@Override//根据key值进行排序(升序)
		public int compareTo(Object arg0) {
			int keys =((Element)arg0).key;
			if(keyb[i]? b[i]:a[i];//按Johnson法则分别取对应的b[i]或a[i]值作为关键字
			boolean job = a[i]<=b[i];//给符合条件a[i]

算法实现的结果如下:

算法java实现--动态规划--流水作业调度问题_第1张图片

对于算法的java实现代码,自己的总结:

1)首先将a,b从(i=1--n),将a[i],b[i]中,小的那个放到数组d的key里;并按key将n个Element进行排序

2)d[i].job作为标志(true,即a[i]<=b[i0]),属于N1,用c[i]的前几个保存index,即作业标号(0,1,2,3.。。。。)

                        (false,即a[i]>b[i0]),属于N2,用c[i]的后几个保存index,即作业标号(0,1,2,3.。。。。)

3)最后,循环按c[i]的作业标号,计算所需时间(即a[c[i]])

你可能感兴趣的:(java算法)