第五章 回溯法-批处理作业调度
来源:互联网 发布:java web开发实战经典 编辑:程序博客网 时间:2024/06/04 18:08
http://blog.csdn.net/wzq153308/article/details/46365177
问题描述
给定 n 个作业的集合 j = {j1, j2, ..., jn}。每一个作业 j[i]批处理作业调度问题要求对于给定的 n 个作业,制定最佳作业调度方案,使其完成时间和达到最小。
- /*该代码采用了回溯法解决最优调度问题。
- * 算法思想:对于有n个不同的任务,搜索出其最佳排列,属于一棵排列树搜索问题。
- * 采用回溯法,搜索到第t层时,当已经是叶子节点时,说明该路径就是当前情况下的最优解。
- * 当t不是叶子节点时,依次按照一定的顺序执行当前剩下的任务,将剩下的任务全部遍历一遍。
- * 在遍历过程中,按照schedule[t:n]完成剩下的搜索。计算执行当前任务后,各个时间点
- * 的变化。如果该层某个节点的任务执行之后,依然符合剪枝函数,则将当前的策略顺序做出
- * 调整,将刚刚执行的那个节点的任务序号放置到当前,然后继续向下进行搜索。
- *
- * 剪枝函数:当当前节点的总时间已经大于已找到的最优时间,则该节点后面的节点都不用进行搜索。直接回溯。
- *
- * */
- package BackTrack;
- public class BestSchedule2 {
- int n=3;//作业数
- int[][] mission={{2,1},{3,1},{2,3}};
- int bestFinishtime = Integer.MAX_VALUE;//最短时间
- int[] schedule = {0,1,2};//默认的策略顺序。
- int[] bestSchedule = new int[n];//最佳顺序
- int[] f2 = new int[n];//第二台机器的每个任务的结束时间
- int f1,totaltime;//f1当前任务的结束时间,f2的总时间
- public void swap(int[] str,int m,int n){
- int temp = str[m];
- str[m] = str[n];
- str[n] = temp;
- }
- public void BackTrack(int t){
- //当搜索到叶子节点后,将这次遍历的策略赋值到最佳策略。
- if(t>n-1){
- bestFinishtime = totaltime;
- for(int i=0;i<n;i++)
- bestSchedule[i] = schedule[i];
- return;
- }
- for(int i=t;i<n;i++){ //下面执行的是第t次的任务,全部遍历剩下的可能性。
- f1+=mission[schedule[i]][0];
- if(t==0)
- f2[t]=f1+mission[schedule[i]][1];
- else
- f2[t] = ((f2[t-1]>f1)?f2[t-1]:f1)+mission[schedule[i]][1];
- totaltime += f2[t];
- //如果该作业处理完之后,总时间已经超过最优时间,就直接回溯。
- if(totaltime<bestFinishtime){
- swap(schedule,t,i); //把选择出的原来在i位置上的任务序号调到当前执行的位置t
- BackTrack(t+1);
- swap(schedule,t,i);//进行回溯,还原,执行该层的下一个任务。
- }
- f1 -= mission[schedule[i]][0];
- totaltime -= f2[t];
- }
- }
- public static void main(String[] args){
- BestSchedule2 bs = new BestSchedule2();
- bs.BackTrack(0);
- System.out.println("最佳调度方案为:");
- for(int i=0;i<bs.n;i++)
- System.out.print(bs.bestSchedule[i]+" ");
- System.out.println();
- System.out.println("其完成时间为"+bs.bestFinishtime);
- }
- }
0 0
- 第五章 回溯法-批处理作业调度
- 第五章【回溯法】批处理作业调度问题
- 批处理作业调度-----回溯法
- 回溯法--批处理作业调度
- 第5章 回溯法,批处理作业调度
- 【回溯法】批处理作业调度问题
- 批处理作业调度问题 回溯法
- 批处理作业调度(回溯法)
- 回溯法实现批处理作业调度
- 回溯法解决批处理作业调度问题
- 回溯法 批处理作业调度问题
- 回溯法-5.3批处理作业调度
- 批处理作业调度(回溯)
- 批处理作业调度(回溯)
- 算法作业-批处理作业调度-回溯|分支限界法
- 算法java实现--回溯法--批处理作业调度问题
- Java语言描述:回溯法之批处理作业调度
- 回溯之批处理作业调度问题
- ubuntu下安装Docker
- bootstrap v3.3.6 版本.table-striped不起作用的问题
- 如何让visusal studio 代码编辑器显示行号
- poj 1011Sticks(搜索 剪枝超级多 经典)
- 快乐编程,娱乐注释
- 第五章 回溯法-批处理作业调度
- ARC转换
- Android Studio错误Error:(23, 17) Failed to resolve: junit:junit:4.12解决方案
- leetcode 003 Longest Substring Without Repeating Characters(java)
- stl学习
- 大理石在哪儿(UVa 10474)(排序与检索)
- 欢迎使用CSDN-markdown编辑器
- windows、Linux、Mac系统回车换行符的区别
- Android开发中获取assets文件夹下Xml文件的问题