算法第五章作业

  1. 最小重量机器设计问题
    1.1 解空间
    每个零件对应一个供应商编号(1到m),所以解是一个长度为n的向量 其中x的范围为{1,2,……,m}表示第i个零件选择的供应商。 解空间大小为m的n次方。
    1.2 解空间树
    解空间树是一个m叉树,深度为n(根深度为0或1取决于定义,这里通常根深度为0,对应第0个零件,但常从第1个零件开始展开)。根结点:尚未选择任何零件的状态。第k层结点:已经为前k 个零件选择了供应商,正在决定第k+1个零件的供应商。叶子结点(第n层):所有零件选择完毕,得到一个完整解(可能满足或不满足价格约束)。每个非叶子结点有m个子结点,分别对应选择第k个零件的m个供应商之一。
    1.3 遍历解空间树时,每个结点的状态值
    每个结点需要维护的状态信息包括:当前总价格current_cost:已选零件的价格之和。用于约束剪枝:如果当前总价格已经超过C,则放弃该分支。当前总重量current_weight:已选零件的重量之和。用于比较:当到达叶子结点且满足价格约束时,更新最小重量记录。当前解向量x[1..k]:已做的选择(前k个零件的供应商编号)。当前最小重量best_weight(全局或引用传递):记录到目前为止找到的可行解的最小重量,用于限界剪枝。剩余零件的最小可能重量下界(可用于进一步优化): 如果当前重量加上剩余零件在**每个供应商中最小重量的和已经大于等于best_weight,则可以剪枝。实际回溯时,状态值通常包括(k, current_cost, current_weight),以及选择的路径。
  2. 我对回溯算法的理解
    回溯法是一种系统性地搜索解空间的算法,它通过深度优先遍历解空间树,并在遍历过程中利用约束条件剪去不可行分支,利用限界条件剪去非最优分支(对于优化问题)。
    核心思想:“尝试-回溯”,即做出一系列选择,如果当前部分选择已经导致不可能得到可行解或更优解,就撤销最近的选择(回溯),尝试其他选择。
    关键特点:系统性:能遍历所有可行解(除非被剪枝)。深度优先:节省空间,只存储当前路径。剪枝:分为约束剪枝(不可行)和限界剪枝(不可能更优)。适用范围:组合问题,如排列、子集、n皇后、图的着色、背包问题等。时间复杂度:通常是指数级,但剪枝效果好的话,实际运行可能远小于解空间大小。
    回溯法与分支限界法的区别:回溯法通常DFS,用约束和限界剪枝。分支限界法通常 BFS 或优先队列,用限界函数选择扩展结点,适合优化问题,常能更快找到较优解并剪枝。
posted @ 2025-12-23 18:35  manbout  阅读(4)  评论(0)    收藏  举报