算法第五章作业

1. 请用回溯法的方法分析“最小重量机器设计问题”

  1.1 说明“最小重量机器设计问题"的解空间

  解空间是二叉树叶子节点的重量,通过比较叶子节点的重量得出最小重量。

  1.2 说明 “最小重量机器设计问题"的解空间树

  第几层代表第几件物品,每个节点有三个分支,每个分支分别代表一个供应商。

  1.3 在遍历解空间树的过程中,每个结点的状态值是什么

  每个节点的状态值如下:

x[t], nP, nW // x[t]代表选择第几个供应商,nP:当前价格,nW:当前质量

  

2. 你对回溯算法的理解

  回溯算法是一种选优搜索法,按选优条件向前搜索,以达到目标。简单的说是在搜索过程中寻找问题的解,当发现已不满足求解条件时,就回溯返回,尝试别的路径。

  当探索到某一步时,发现原先选择不是目前的最优解或不满足问题条件时,就退回一步重新选择,并减去当前步骤的节点对应的值。

  以上一问中“最小重量机器设计问题”为例,回溯算法如下:

void Backtrack(int t) {
    if (t > n) {
        bW = nW;
        for (int i = 1; i <= n; i++)
            result[i] = x[i];
        return;
    }

    for (int i = 1; i <= m; i++) { //遍历每个分支
        if (nP + c[t][i] <= d && nW + w[t][i] < bW) { //判断是否目前的最优解或不满足问题条件
            x[t] = i;
            nP += c[t][i];
            nW += w[t][i];
            Backtrack(t + 1); //进到下一层
            nP -= c[t][i];
            nW -= w[t][i]; //退回一步重新选择,并减去当前步骤的节点对应的值。
        }
    }
}

  

 

posted @ 2021-12-09 23:42  20201003240洪永超  阅读(39)  评论(0编辑  收藏  举报