算法第五章作业

一、对回溯算法的理解

在我的理解中,回溯法就是把一个问题当作一棵“树”,然后对其进行深度优先的遍历,需要注意的一点就是,每一次往更深一层推进后都要进行“回溯”,即将状态回归到上一层,通过这样的多次遍历,求出其最优解,这就是我理解的回溯算法。

二、子集和”问题的解空间结构和约束函数

“子集和”问题的解空间结构与“0-1背包”类似,对于有n个可选择的数时,其解空间由长度为n的0-1向量组成,该解空间包含对变量的所有可能的0-1赋值。“1”代表选择该数,“0”代表不选该数。

其约束函数为bound函数,即当其剩下的所有数的和加上已选择的数都不能达到目标值,则对其进行“剪枝”,不再继续遍历。

double bound(int t)
{
    int cleft = c - cw;
    while (t < n && cleft > 0)
    {
        cleft -= a[t];
        t++;
    }
    return cleft;
}

三、在本章学习过程中遇到的问题及结对编程的情况

       结对编程情况良好,在互相的学习中彼此都有了长足的进步,并且,由于本次算法期末大作业中,我们选择了回溯法进行完成,更加深了我们对这个算法的理解。

posted @ 2019-12-19 22:30  月Raido  阅读(100)  评论(0编辑  收藏  举报