回溯算法批处理作业调度问题

本文介绍了如何使用回溯算法来解决批处理作业调度问题。每个作业需要在两台机器上依次完成,目标是最小化所有作业在机器2上的处理时间总和。通过构建排列树并进行深度优先搜索,找到最优调度方案。文章包含算法描述和程序代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 1、问题描述

  • 给定n个作业的集合J={j1,j2,j3,…jn},每一个作业都有两项任务分别在两台机器上完成。每个作业必须先由机器1处理,再由机器2处理。作业Ji需要机器j的处理时间为tij,设Fij是作业i在机器j上的完成处理时间。所有作业在机器2上处理的时间和称为该作业调度的完成时间和。

  • 批处理作业调度问题要求对于给定的N个作业,制定最佳作业调度方案,使其完成时间和达到最小。其中最典型的一个例子就是在计算机系统中完成一批n个作业,每个作业都先完成计算,然后将计算结果打印出来。

  • 示例:

     		tji          机器1     机器2
     		作业1         2          1
     		作业2         3          1
     		作业3         2          3
     	在这个例子中。最优调度顺序为:1 3 2;处理时间为:18
    
  • 2、算法描述

  • 从n个作业的所有排列中找出有最小完成时间和的作业调度,所以批处理调度问题是一颗排列树按照回溯搜索排列树的算法框架,设开始时x=[1,2,3,4…,n]是所给的n个作业,则相应的排列树由 x[1,n]的所有排列构成。

  • 在递归方法backtrack中,当i>n时,算法搜索至叶结点,得到一个新的作业调度方案。此时算法适时更新当前最优值和相应的当前作业调度。

  • 当i<n时,当前扩展结点位于排列树的第i-1层。此时算法选择下一个要安排的作业,以深度优先的方式递归的对相应字数进行搜索。对于不满足上届约束的结点,则减去相应的子树。

  • 程序初始化:

	int x[100];//记录当前调度
	int bestx[100];//记录当前最优调度
	int m[100][100];<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值