算法分析 | 回溯法 | 最佳加工顺序

本文分析了如何通过回溯法找到机器零件的最佳加工顺序,以最小化总的加工时间。问题涉及两个步骤:机器A和机器B的连续处理。介绍了问题背景、递归算法中的排列树概念,并解释了没有约束函数但需要使用限界函数来避免无效扩展。文章还提供了代码实现的框架,包括全局变量、递归函数和主调用函数。
摘要由CSDN通过智能技术生成

一.问题分析

1.问题描述:

有n个机器零件,每个零件必须先由机器A处理,再由机器B处理。零件Pi需要机器1,2处理时间为P[i].Atime,P[i].Btime

如何安排零件加工顺序,使第一个零件从机器1上加工开始到最后一个零件在机器2上加工完成,所需的总加工时间最短?

 

2.A机可以连续不间断开动,B机第i个零件的加工完成时间为:

B_end_time[ i ]=max(B_end_time[ i - 1 ] , A_end_time[ i ]) + P[ i ].Btime

取决于B机处理完前一个零件A机处理完本零件的最晚时间

 

3.排列树的概念

回忆递归算法中数组全排列的内容:

a[N]的全排列 = for(0..N-1)将每个元素swap到a[0]一次 + a[N-1]的全排列

在解空间中,每递归深入一层,分支数-1 ,到叶结点时,解的数量=N*(N-1)*(N-2)*(N-3).......=N!

 

4.约束与限界函数

①约束函数禁止 "根本就不可能出现的情况"  ,本题中每一种排列方式都可以出现,所以没有约束函数

②限界函数禁止 "会出现但没必要再扩展的情况". 当目前的B_end_time小于已知的最优解bestn2时,可以试着进行递归

因此,最优解bestn2初始值=INT_MAX

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值