算法实践-任务调度-最小惩罚算法-贪心算法

package com.greedy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TaskReschedule {
	private List taskList=new ArrayList();
	private List schedulList=new ArrayList();
	private Map,Integer>memory;
	private int total;
	
	public TaskReschedule(int []ids,int[] finals,int[]punishs)throws Exception{
		if(ids.length!=finals.length&&finals.length!=punishs.length){
			throw new Exception("数据错误");
		}
		total=ids.length;
		for(int i=0;i,Integer>();
	}
	public int reschedule()throws Exception{
		 return innerReschedul(1);
	}
	public void printOrder(){
		for(int i=0;ip){
				index=k;
				punish=p;
			}
			taskList.add(k, tmp);
		}
		if(taskList.size()==0){
			return punish;
		}
		schedulList.add(taskList.get(index));
		taskList.remove(index);
		innerReschedul(time+1);
		return punish;
	}
	private int punish(int time)throws Exception{
		if(taskList.size()+time!=total+1){
			throw new Exception("error");
		}
		if(memory.get(taskList)!=null){
			return memory.get(taskList);
		}

		boolean restPunish=true;
		for(int i=0;i=time){
				restPunish=false;
				break;
			}
		}
		
		//System.out.println("=========");
		if(restPunish){
			//System.out.println("punishment-start");
			int punish=0;
			for(int i=0;ip){
				punish=p;
			}
			taskList.add(k,tmp);
		}
		memory.put(taskList, punish);
		//System.out.println(time);
		//System.out.println("punishTotal:"+punish);
		return punish;
	}
	private static class Task{
		private int id;
		private int end;
		private int punish;
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public int getEnd() {
			return end;
		}
		public void setEnd(int end) {
			this.end = end;
		}
		public int getPunish() {
			return punish;
		}
		public void setPunish(int punish) {
			this.punish = punish;
		}
		
		
	}
	public static void main(String[] args)throws Exception {
		int [] id=new int[]{1,2,3,4,5,6,7};
		int []finall=new int[]{4,2,4,3,1,4,6};
		int []punish=new int[]{70,60,50,40,30,20,10};
		TaskReschedule taskReschdule=new TaskReschedule(id,finall,punish);
		System.out.println(taskReschdule.reschedule());
		taskReschdule.printOrder();
	}

}

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