回溯算法-排列树-批处理作业调度

本文介绍了回溯算法如何用于解决批处理作业调度问题,通过解空间树的概念,特别是排列树,来寻找完成时间最短的作业调度方案。通过一个具体的3个作业的例子,展示了不同调度方案的完成时间和,以及如何找到最佳调度1,3,2,其完成时间为18。" 124556284,7384817,自动化安装Hadoop及组件,"['Hadoop', '大数据', '自动化部署']
摘要由CSDN通过智能技术生成

回溯算法: 它可以系统的搜索一个问题的所有解或任意解。它的关键点在于处理空间树问题。空间树中对不符合的节点要进行“剪枝”处理 。

回溯思想: 在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。 若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。 而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。

解空间树: 主要分为子集树与排列树。子集树(局部性):就是对某一集合对象中选取一部分元素构造问题的最优解。排列树(整体性):对含多个任务的作业进行调度。选出相应的排列顺序,从而构造最优解 。

 子集树框架:

void Backpack(int t){        /*x集合元素个数*/
     if(t>n){               
            output(x);    /*到达叶子节点,记录状态或输出最终结果*/
     }else{
         for(int i = 0;i<=1;i++){
             x[t] = i;      /*二叉树排列*/  
         } 
         /*constraint约束函数Bound上界函数*/
         if(constraint(t)&&Bound(t)){  
            Backpack(t+1);
         }
     }
 }
排列树框架:
 void Backpack(int t){        /*x作业个数*/
     if(t>n){               
            output(x);    /*到达叶子节点,记录状态或输出最终结果*/
     }else{
         for(int i = t;i<=n;i++){
           if(constraint(t)&&Bound(t)){  
            swap(x[t],x[i]);
            Backpack(t+1);
            swap(x[i],x[t]);
         } 
     }
 }

作业调度:

   <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值