算法java实现--贪心算法--多机调度问题
来源:互联网 发布:婚庆后期软件 编辑:程序博客网 时间:2024/05/16 05:35
多机调度问题的java实现(贪心算法)
具体问题描述以及C/C++实现参见网址
http://blog.csdn.net/liufeng_king/article/details/8740572
import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.List;/** * 多机调度问题--贪心算法 * @author Lican * */public class JobMachine {public static class JobNode implements Comparable{int id;//作业的标号int time;//作业时间public JobNode(int id,int time){this.id=id;this.time=time;}@Overridepublic int compareTo(Object x) {//按时间从大到小排列int times=((JobNode)x).time;if(time>times) return -1;if(time==times) return 0;return 1;}}public static class MachineNode implements Comparable{int id;//机器的标号int avail;//机器空闲的时间(即机器做完某一项工作的时间)public MachineNode(int id,int avail){this.id=id;this.avail=avail;}@Overridepublic int compareTo(Object o) {//升序排序,LinkedList的first为最小的int xs=((MachineNode)o).avail;if(avail<xs) return -1;if(avail==xs) return 0;return 1;}}public static int greedy(int[] a ,int m){int n=a.length-1;//a的下标从1开始,所以n(作业的数目)=a.length-1int sum=0;if(n<=m){for(int i=0;i<n;i++)sum+=a[i+1];System.out.println("为每个作业分别分配一台机器");return sum;}List<JobNode> d=new ArrayList<JobNode>();//d保存所有的作业for(int i=0;i<n;i++){//将所有的作业存入List中,每一项包含标号和时间JobNode jb=new JobNode(i+1,a[i+1]);d.add(jb);}Collections.sort(d);//对作业的List进行排序LinkedList<MachineNode> h=new LinkedList<MachineNode>();//h保存所有的机器for(int i=1;i<=m;i++){//将所有的机器存入LinkedList中MachineNode x=new MachineNode(i,0);//初始时,每台机器的空闲时间(完成上一个作业的时间)都为0h.add(x);}int test=h.size();for(int i=0;i<n;i++){Collections.sort(h);MachineNode x=h.peek();System.out.println("将机器"+x.id+"从"+x.avail+"到"+(x.avail+d.get(i).time)+"的时间段分配给作业"+d.get(i).id);x.avail+=d.get(i).time;sum=x.avail;}return sum;}public static void main(String[] args) {int[] a={0,2,14,4,16,6,5,3};int m=3;int sum=greedy(a,m);System.out.println("总时间为:"+sum);}}/** 运行结果: 将机器1从0到16的时间段分配给作业4将机器2从0到14的时间段分配给作业2将机器3从0到6的时间段分配给作业5将机器3从6到11的时间段分配给作业6将机器3从11到15的时间段分配给作业3将机器2从14到17的时间段分配给作业7将机器3从15到17的时间段分配给作业1总时间为:17*/
0 0
- 算法java实现--贪心算法--多机调度问题
- —【贪心算法】多机调度问题
- 多机调度问题-贪心算法
- 贪心算法之多机调度问题
- 多机调度问题(C语言实现)——贪心算法应用(4)
- 贪心算法实例(三):多机调度问题
- 区间调度问题 ----- 贪心算法
- 算法4.贪心算法的调度问题。
- 算法java实现--贪心算法--单源最短路径问题--Dijkstra算法
- 0026算法笔记——【贪心算法】多机调度问题
- 0026算法笔记——【贪心算法】多机调度问题
- 算法篇-6-贪心算法-活动安排&背包问题&多机调度
- 用贪心算法背包问题,Java实现
- JAVA贪心算法实现背包问题
- 贪心算法——区间调度问题
- 贪心算法之区间调度问题
- 【贪心算法】区间调度问题总结
- 贪心算法_作业调度问题
- hbase 之 split
- 如何快速编译hal层的修改
- SLF4J 的几种实际应用模式--之三:JCL-Over-SLF4J+SLF4J
- ORACLE 常用命令
- Knight Moves uva
- 算法java实现--贪心算法--多机调度问题
- iOS技巧之获取本机通讯录中的内容,解析通讯录源代码
- WinCE 进程、线程和内存管理之同步
- web-polygraph源码框架和session处理流程笔记
- hdu3336(kmp)
- maven scope runtime
- POJ Shortest Prefixes
- centos cacti 安装.
- 多线程入门教程