算法作业第五章
1.1 解空间定义
解空间由所有满足“总价格不超过阈值d”的供应商选择方案构成。其中,每一个合法解对应一个长度为n的向量(n为部件总数),向量中每个元素表示对应序号部件所选择的供应商编号。从理论上看,解空间的最大规模为mⁿ(m为每个部件可选的供应商数量),但实际解空间仅包含满足总价格≤d约束条件的方案,因此实际规模远小于理论最大值。
1.2 解空间树结构(深度为n)
解空间以树形结构呈现,各层级结点的含义与结构特征如下:
- 根结点(第1层):作为解空间树的起始结点,代表尚未为任何部件选择供应商的初始状态;
- 中间结点(第k层,1<k<n):对应“已为前k个部件完成供应商选择”的状态,从根结点到该结点的路径构成一个“部分解”(即仅完成部分部件的供应商选择,未覆盖全部n个部件);
- 子结点规则:每个非叶子结点包含m个子结点,每个子结点分别对应“为下一个(第k+1个)部件选择某一个特定供应商”的决策;
- 叶子结点(第n层):代表已完成所有n个部件的供应商选择,对应解空间中的一个完整候选方案。
1.3 遍历过程中结点的状态参数
在回溯法遍历解空间树的过程中,每个结点需维护以下核心状态值,用于决策、剪枝与最优解记录:
- 当前层数t:标识遍历进度,含义为“已完成前t-1个部件的供应商选择”,即将对第t个部件进行供应商决策;
- 当前总价格curprice:累计已选择的t-1个部件的价格总和,用于校验是否满足价格约束;
- 当前总重量curweight:累计已选择的t-1个部件的重量总和,是评估解优劣的核心指标;
- 最小重量记录weight:保存遍历过程中已发现的、满足总价格约束的方案中最小的总重量,作为后续剪枝的限界依据;
- 部分最优解cursupplier[]:数组类型,记录前t-1个部件所选择的供应商编号,构成当前路径的部分解;
- 全局最优解supplier[]:数组类型,最终保存对应“最小重量weight”的完整供应商选择方案,即问题的最优解。
1.4 对回溯法的核心理解
回溯法是一种基于深度优先搜索(DFS)遍历解空间的优化搜索算法,核心目标是高效寻找问题的最优解(或所有可行解)。其核心思想可拆解为“逐步构建-校验剪枝-回溯调整”三步:
- 逐步构建候选解:从根结点出发,按照解空间树的层级依次为每个部件选择供应商,逐步拼接完整的候选解(从部分解到完整解);
- 约束与限界剪枝:在构建候选解的过程中,实时校验当前状态(如curprice是否超过阈值d):若违反约束条件(如curprice>d),或当前状态的潜在最优解已劣于已发现的最优解(如curweight≥weight),则触发“剪枝”——放弃对当前结点后续子树的遍历,避免无效搜索;
- 回溯尝试其他选择:剪枝后或遍历完某一结点的所有子结点后,回退到上一层结点,撤销当前层的供应商选择决策,尝试该结点的下一个子结点(即下一个供应商选择),直至遍历完整个解空间树。
简言之,回溯法并非盲目枚举所有候选解,而是通过“走不通就回头”的回溯机制,结合约束条件(过滤非法解)和限界条件(过滤非最优解)剪枝无效分支,大幅缩减搜索空间,最终在有效遍历范围内找到满足约束的最优解。这种“试探-校验-回溯”的逻辑,是回溯法区别于暴力枚举的核心特征,也是其在组合优化问题中提升搜索效率的关键。

浙公网安备 33010602011771号