第五章作业

一、回溯法分析“最小重量机器设计问题”

首先明确问题核心定义:
现有 n个部件,每个部件有 m个供应商 可选;第i个部件的第j个供应商提供的产品,重量为 w_{ij} 、价格为 c_{ij} ( 1 \leq i \leq n, 1 \leq j \leq m )。要求选择每个部件的一个供应商,使得 总价格不超过预算C,且 总重量最小。

1.1 解空间

解空间是所有满足“每个部件选1个供应商”的选择组合集合,形式化表示为 n维向量集合:
S = { (x_1, x_2, ..., x_n) \mid x_i \in {1,2,...,m}, 1 \leq i \leq n }
• 其中 x_i = j 表示第i个部件选择第j个供应商;

• 解空间大小为 m^n (每个部件有m种选择,n个部件的全组合);

• 约束条件:该向量对应的总价格 \sum_{i=1}^n c_{i,x_i} \leq C ;

• 目标:在满足约束的向量中,找到总重量 \sum_{i=1}^n w_{i,x_i} 最小的向量。

1.2 解空间树

解空间树是描述解空间的 m叉有序树,直观呈现所有选择路径,结构特征如下:

• 树的层数 = 部件个数n + 1(第0层为根节点,第1~n层对应n个部件的选择);

• 根节点(第0层):无部件选择,是所有路径的起点;

• 第k层节点(1 ≤ k ≤ n):代表“前k个部件已完成选择”的中间状态,每个节点有m个分支(对应第k+1个部件的m个供应商选择);

• 叶子节点(第n层):代表完整解(所有n个部件均选好供应商),叶子节点总数 = 解空间大小 m^n ;

• 示例:n=2个部件、m=2个供应商时,解空间树为2叉树,根节点(0层)→ 第1层2个节点(部件1选供应商1/2)→ 第2层4个叶子节点(部件2选供应商1/2的组合)。

1.3 遍历过程中每个结点的状态值

为了实现剪枝(减少无效搜索)和计算目标函数,每个节点需记录3个核心状态值:

  1. k :当前已完成选择的部件个数(即节点所在层数, 0 \leq k \leq n );

  2. sum_w :前k个部件的累计重量( sum_w = \sum_{i=1}^k w_{i,x_i} );

  3. sum_c :前k个部件的累计价格( sum_c = \sum_{i=1}^k c_{i,x_i} )。

• 状态值的作用:

◦ 若 sum_c > C :当前路径已违反预算约束,直接剪枝(不再遍历该节点的子树);

◦ 若 sum_w \geq 当前已知的最小重量 :当前路径的重量已无优化空间,剪枝;

◦ 叶子节点(k=n): sum_w 为完整解的重量,若满足 sum_c \leq C ,则更新全局最小重量。

二、对回溯算法的理解

回溯算法是一种 基于深度优先搜索(DFS)的穷举优化策略,核心是“试错+剪枝”,适用于解决“组合优化问题”(如最小重量机器设计、旅行商TSP、n皇后、子集和等),本质是对解空间的系统性遍历,通过提前终止无效路径(剪枝)减少搜索量。

核心思想

  1. 定义解空间:将问题的所有可能解抽象为一个结构化集合(如向量、集合);

  2. 构建解空间树:将解空间组织为树状结构,每个节点代表一个中间解状态;

  3. 深度优先遍历:从根节点出发,逐层选择一个分支向下探索,逐步构建完整解;

  4. 剪枝策略:在遍历中通过“约束函数”(如预算约束 sum_c \leq C )排除不可行路径,通过“限界函数”(如 sum_w \geq 当前最小值 )排除非最优路径,减少无效搜索;

  5. 回溯:当遍历到叶子节点(得到完整解)或触发剪枝条件时,返回上一层节点,尝试其他分支,直到遍历所有有效路径。

关键特征

• 与穷举法的区别:穷举遍历所有解,回溯法通过剪枝跳过无效路径,效率更高(但最坏时间复杂度仍为 O(m^n) ,适用于n较小的场景);

• 核心依赖:解空间的结构化表示(便于树状遍历)和高效的剪枝函数(决定算法效率);

• 适用场景:问题可分解为多步选择,每个选择有明确的约束条件,且需要找到满足约束的最优解或所有可行解。

与“最小重量机器设计问题”的关联

回溯法在该问题中,通过解空间树的深度优先遍历,用节点状态值(k, sum_w, sum_c)实时判断路径有效性,避免遍历所有 m^n 个解,最终高效找到“预算内最小重量”的最优解。

posted @ 2025-12-24 12:42  xzyuuu  阅读(1)  评论(0)    收藏  举报