算法第5章作业

一、对回溯算法的理解

     回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。

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

解空间结构:类似树,每一层都有两个选择,0代表不选,而1代表选。第n层则代表第n个数选不选。

约束函数:当前的子集和大于原先的子集和,则舍弃节点,不再往下搜索,用一个rest变量记录当前元素到最后一个元素的和,如果当前的和加上rest的和大于原先要求的子集和,则进入右子树。

rest-=a[t];
       if(sum + a[t] <= c)
        {
                x[t] = 1 ;
                sum = sum+a[t] ;
                if ( backtrack(t+1) )
                        return true;
                sum -= a[t];
        }
        if( sum + rest >= c) 
        {
                x[t] = 0 ;
                if ( backtrack(t+1) )
                        return true;
        } 
        rest += a[t];

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

     回溯法的思想还是挺容易理解的,但是运用在代码种就显得思路有点混乱。跟同伴在编程的时候有时候会卡住,存在剪枝剪不好等情况,还需更加认真学习,对回溯法有更进一步的研究学习。

posted @ 2018-12-23 19:00  YILINNN  阅读(122)  评论(0编辑  收藏  举报