算法第五章作业
1、对于 “最小重量机器设计问题”,回溯法的核心逻辑是:为每个部件依次选择供应商,累计总价格和总重量,若总价格超过限制则剪枝;若遍历完所有部件(到达叶子节点),则更新最小重量和最优供应商选择。
1.1、(1)解的形式:每个解是一个长度为 n 的序列 (j₁, j₂, ..., jₙ),其中: jᵢ ∈ {1, 2, ..., m}(jᵢ 表示第 i 个部件选择的供应商编号);约束条件:总价格 ∑cᵢⱼᵢ ≤ d(cᵢⱼᵢ 是第 i 个部件从供应商 jᵢ 采购的价格); 优化目标:总重量 ∑wᵢⱼᵢ 最小(wᵢⱼᵢ 是第 i 个部件从供应商 jᵢ 采购的重量)。(2)解空间的范围:无约束时,解空间包含 mⁿ 个可能的序列(每个部件有 m 种选择,共 n 个部件); 有约束时,解空间是上述集合中满足 ∑cᵢⱼᵢ ≤ d 的子集。(3)解空间的类型:属于排列树 / 组合树,每个解对应解空间树中从根到叶子的一条路径。
1.2、解空间树是一棵 m 叉树,结构如下: (1)树的节点定义:根节点:第 0 层,无部件选择,总价格 = 0,总重量 = 0;第 k 层节点(1 ≤ k ≤ n):表示已确定前 k 个部件的供应商,正在选择第 k+1 个部件的供应商;叶子节点:第 n 层,所有 n 个部件的供应商已确定,对应一个完整的解(序列)。(2)树的边定义:从第 k 层节点到第 k+1 层节点的边,表示为第 k+1 个部件选择某个供应商 j(j=1~m),每条边对应一个具体的选择。(3)遍历方式:回溯法采用深度优先遍历:从根节点出发,先选第 1 个部件的供应商 1,再选第 2 个部件的供应商 1,…,直到叶子节点;若不满足约束或无优化空间,则回溯到上一层,选择下一个供应商,重复此过程。
1.3、cur_part : cur_part=0:未处理任何部件(根节点);cur_part=n:所有部件处理完成(叶子节点)。
cur_cost :累计总价格:已选择的 cur_part 个部件的价格之和,约束:cur_cost ≤ d(否则剪枝)。
cur_weight: 累计总重量:已选择的 cur_part 个部件的重量之和,剪枝条件:cur_weight ≥ min_weight(当前重量已超过已知最小值,无需继续遍历)。
cur_choice: 已选择的供应商序列:长度为 cur_part 的数组,记录前 cur_part 个部件分别选择的供应商编号(用于最终输出最优解)。
2、回溯算法是一种基于深度优先搜索 + 剪枝的通用算法框架,核心是 “尝试 - 回退 - 再尝试”,用于求解组合、排列、子集、优化等问题,尤其适用于 “解空间庞大但需满足特定约束” 的场景(如本题的最小重量机器设计、N 皇后、数独、子集和等)。它不是一种具体算法,而是一种问题求解思路,本质是通过遍历解空间树,逐步构建解的候选,若候选不满足约束则 “回溯”(撤销当前选择),避免无效遍历,最终找到可行解或最优解。
浙公网安备 33010602011771号